• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python openpyxl 带格式复制表格的实现

    有合并单元格的,先把合并单元格复制过去,合并单元格用wm=list(zip(wbsheet.merged_cells))得出合并单元格列表,把其中的(CellRange A1:A4>,) 替换成为A1:A4格式

    再从新表中合并单元格

    再用.has_style: #拷贝格式 测试是否有格式,再复制格式和数据

    其中:

    font(字体类):字号、字体颜色、下划线等

    fill(填充类):颜色等

    border(边框类):设置单元格边框

    alignment(位置类):对齐方式

    number_format(格式类):数据格式

    protection(保护类):写保护

    import os							#找文件目录
    import win32com.client as win32 	#操作excel文件
    from tqdm import tqdm 				#进度条显示
    from openpyxl import load_workbook # 读取时导入这个
    from openpyxl.styles import Font, Alignment #设置单元格格式
    from openpyxl.utils import get_column_letter, column_index_from_string
    from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
    from copy import copy
    path=input('输入整理前原始路径: ')
    if path=="":
    	path=os.getcwd()
    xlsx_lists=[]
    xls_lists=[]
    for file in os.listdir(path):
     filename=os.path.join(path,file)
     if os.path.isfile(filename):    #是目录
      if filename.endswith(".xls"):
      	xls_lists.append(filename)
      if filename.endswith(".xlsx"):
      	xlsx_lists.append(filename)
    source_file='原始数据.xlsx'
    if os.path.exists(os.path.join(os.getcwd(),source_file)):
    	os.remove(os.path.join(os.getcwd(),source_file))
    choose="1"
    excel = win32.gencache.EnsureDispatch('Excel.Application')
    # while choose not in "1|2":
    #  choose =input("xls转为xlsx:1 xlsx转为xls:2 ")
    if choose=="1":
    	with tqdm(total=len(xls_lists),desc='写文件数 ',leave=True,unit='个',unit_scale=True,mininterval=0.5,bar_format=None) as pbar:
    		for xls_list in xls_lists:
    			pbar.update(1)
    			wb = excel.Workbooks.Open(xls_list)
    			wb.SaveAs(xls_list+"x", FileFormat = 51) #FileFormat = 51 is for .xlsx extension
    			wb.Close()        #FileFormat = 56 is for .xls extension
    		pbar.close()
    else:
    	with tqdm(total=len(xls_lists),desc='写文件数 ',leave=True,unit='个',unit_scale=True,mininterval=0.5,bar_format=None) as pbar:
    		for xlsx_list in xlsx_lists:
    			pbar.update(1)
    			wb = excel.Workbooks.Open(xlsx_list)
    			wb.SaveAs(xlsx_list[0:len(xlsx_list)-1], FileFormat = 56) #FileFormat = 51 is for .xlsx extension
    			wb.Close() 
    		pbar.close()
    excel.Application.Quit()
    tag_file='拆分后表.xlsx'
    totaldata=pd.DataFrame()
    writer=pd.ExcelWriter(tag_file)
    totaldata.to_excel(writer, 'sheet')
    writer.save()
    book = load_workbook(tag_file)   #能写入已存在表中
    wb = load_workbook('原始数据.xlsx')
    for sheet in wb.sheetnames:
    	print(sheet)
    	wbsheet=wb[sheet]
    	for num in range(3):
    		name=wbsheet.cell(1,num*15+10).value
    		wbsheet_new = book.create_sheet(name,0)
    		wm=list(wbsheet.merged_cells) #开始处理合并单元格形式为“(CellRange A1:A4>,),替换掉(CellRange 和 >,)' 找到合并单元格
    		#print (list(wm))
    		if len(wm)>0 :
    			for i in range(0,len(wm)):
    				cell2=str(wm[i]).replace('(CellRange ','').replace('>,)','')
    				#print("MergeCell : %s" % cell2)
    				wbsheet_new.merge_cells(cell2)
    		for rows in range(40):
    			wbsheet_new.row_dimensions[rows+1].height = wbsheet.row_dimensions[rows+1].height 
    			for col in range(14):
    				wbsheet_new.column_dimensions[get_column_letter(col+1)].width = wbsheet.column_dimensions[get_column_letter(col+1)].width
    				wbsheet_new.cell(row=rows+1,column=col+1,value=wbsheet.cell(rows+1,num*15+col+1).value)
    				if wbsheet.cell(rows+1,num*15+col+1).has_style:	#拷贝格式
    					wbsheet_new.cell(row=rows+1,column=col+1).font = copy(wbsheet.cell(rows+1,num*15+col+1).font)
    					wbsheet_new.cell(row=rows+1,column=col+1).border = copy(wbsheet.cell(rows+1,num*15+col+1).border)
    					wbsheet_new.cell(row=rows+1,column=col+1).fill = copy(wbsheet.cell(rows+1,num*15+col+1).fill)
    					wbsheet_new.cell(row=rows+1,column=col+1).number_format = copy(wbsheet.cell(rows+1,num*15+col+1).number_format)
    					wbsheet_new.cell(row=rows+1,column=col+1).protection = copy(wbsheet.cell(rows+1,num*15+col+1).protection)
    					wbsheet_new.cell(row=rows+1,column=col+1).alignment = copy(wbsheet.cell(rows+1,num*15+col+1).alignment)
    wb.close()
    book.save('拆分后表.xlsx')
    book.close()
    

    上例中,因为要把一个表拆分为三个,所以要循环三次

    补充:python-excel 之带有格式及合并单元格样式的表格复制

    代码如下:

    from openpyxl import load_workbook
     
     
    def copy_excel(totle_excel,totle_sheetname,down_excel,down_sheetname):
     down = load_workbook(down_excel)
     totle = load_workbook(totle_excel)
     totle_sheet = totle[totle_sheetname]
     down_sheet = down[down_sheetname]
     # 两个for循环遍历整个excel的单元格内容
     for i, row in enumerate(down_sheet.iter_rows()):
      for j, cell in enumerate(row):
       totle_sheet.cell(row=i + 1, column=j + 1, value=cell.value)
     totle.save(totle_excel)

    代码说明:

    文件内容是从down_excel的down_sheetname复制到totle_excel的totle_sheetname

    说明:

    以上代码可以将格式以及合并单元格的样式均复制到另一张表

    注意:

    如果你是跨excel文件的复制且带有公式,不建议使用

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
    • Python Excel处理库openpyxl详解
    • python使用openpyxl库读写Excel表格的方法(增删改查操作)
    • Python利器openpyxl之操作excel表格
    • Python离线安装openpyxl模块的步骤
    • 解决python 使用openpyxl读写大文件的坑
    • Python openpyxl 无法保存文件的解决方案
    • python 使用openpyxl读取excel数据
    • python openpyxl的使用方法
    上一篇:python openpyxl筛选某些列的操作
    下一篇:小众实用的Python 爬虫库RoboBrowser
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python openpyxl 带格式复制表格的实现 python,openpyxl,带,格式,复制,