如何在python中使用openpyxl实现带格式复制表格

如何在python中使用openpyxl实现带格式复制表格?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

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

如何在python中使用openpyxl实现带格式复制表格

再从新表中合并单元格

再用.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实现带格式复制表格问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。

发布于 2021-03-13 15:40:59
收藏
分享
海报
0 条评论
168
上一篇:使用R语言怎么生成一个随机数 下一篇:怎么在Python中写入Excel的格式
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码