如何在python中使用openpyxl实现带格式复制表格
如何在python中使用openpyxl实现带格式复制表格?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
有合并单元格的,先把合并单元格复制过去,合并单元格用wm=list(zip(wbsheet.merged_cells))得出合并单元格列表,把其中的(<CellRange A1:A4>,) 替换成为A1:A4格式
再从新表中合并单元格
再用.has_style: #拷贝格式 测试是否有格式,再复制格式和数据
其中:
font(字体类):字号、字体颜色、下划线等
fill(填充类):颜色等
border(边框类):设置单元格边框
alignment(位置类):对齐方式
number_format(格式类):数据格式
protection(保护类):写保护
importos #找文件目录 importwin32com.clientaswin32 #操作excel文件 fromtqdmimporttqdm #进度条显示 fromopenpyxlimportload_workbook#读取时导入这个 fromopenpyxl.stylesimportFont,Alignment#设置单元格格式 fromopenpyxl.utilsimportget_column_letter,column_index_from_string fromopenpyxl.stylesimportPatternFill,Border,Side,Alignment,Protection,Font fromcopyimportcopy path=input('输入整理前原始路径:') ifpath=="": path=os.getcwd() xlsx_lists=[] xls_lists=[] forfileinos.listdir(path): filename=os.path.join(path,file) ifos.path.isfile(filename):#是目录 iffilename.endswith(".xls"): xls_lists.append(filename) iffilename.endswith(".xlsx"): xlsx_lists.append(filename) source_file='原始数据.xlsx' ifos.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') #whilechoosenotin"1|2": #choose=input("xls转为xlsx:1xlsx转为xls:2") ifchoose=="1": withtqdm(total=len(xls_lists),desc='写文件数',leave=True,unit='个',unit_scale=True,mininterval=0.5,bar_format=None)aspbar: forxls_listinxls_lists: pbar.update(1) wb=excel.Workbooks.Open(xls_list) wb.SaveAs(xls_list+"x",FileFormat=51)#FileFormat=51isfor.xlsxextension wb.Close()#FileFormat=56isfor.xlsextension pbar.close() else: withtqdm(total=len(xls_lists),desc='写文件数',leave=True,unit='个',unit_scale=True,mininterval=0.5,bar_format=None)aspbar: forxlsx_listinxlsx_lists: pbar.update(1) wb=excel.Workbooks.Open(xlsx_list) wb.SaveAs(xlsx_list[0:len(xlsx_list)-1],FileFormat=56)#FileFormat=51isfor.xlsxextension 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') forsheetinwb.sheetnames: print(sheet) wbsheet=wb[sheet] fornuminrange(3): name=wbsheet.cell(1,num*15+10).value wbsheet_new=book.create_sheet(name,0) wm=list(wbsheet.merged_cells)#开始处理合并单元格形式为“(<CellRangeA1:A4>,),替换掉(<CellRange和>,)'找到合并单元格 #print(list(wm)) iflen(wm)>0: foriinrange(0,len(wm)): cell2=str(wm[i]).replace('(<CellRange','').replace('>,)','') #print("MergeCell:%s"%cell2) wbsheet_new.merge_cells(cell2) forrowsinrange(40): wbsheet_new.row_dimensions[rows+1].height=wbsheet.row_dimensions[rows+1].height forcolinrange(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) ifwbsheet.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 之带有格式及合并单元格样式的表格复制
代码如下:
fromopenpyxlimportload_workbook defcopy_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的单元格内容 fori,rowinenumerate(down_sheet.iter_rows()): forj,cellinenumerate(row): totle_sheet.cell(row=i+1,column=j+1,value=cell.value) totle.save(totle_excel)
关于如何在python中使用openpyxl实现带格式复制表格问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。
推荐阅读
-
Python中怎么动态声明变量赋值
这篇文章将为大家详细讲解有关Python中怎么动态声明变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中变量的存储原理是什么
-
Python中怎么引用传递变量赋值
这篇文章将为大家详细讲解有关Python中怎么引用传递变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中怎么获取程序执行文件路径
python中怎么获取程序执行文件路径,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的...
-
Python中如何获取文件系统的使用率
Python中如何获取文件系统的使用率,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
-
Python中怎么获取文件的创建和修改时间
这篇文章将为大家详细讲解有关Python中怎么获取文件的创建和修改时间,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读...
-
python中怎么获取依赖包
今天就跟大家聊聊有关python中怎么获取依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据...
-
python怎么实现批量文件加密功能
-
python中怎么实现threading线程同步
小编给大家分享一下python中怎么实现threading线程同步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!...
-
python下thread模块创建线程的方法
本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来...