文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-13 06:33

关注

如何在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_stringfrom openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Fontfrom copy import copypath=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 extensionwb.Close()        #FileFormat = 56 is for .xls extensionpbar.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 extensionwb.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).valuewbsheet_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)].widthwbsheet_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)

关于如何在python中使用openpyxl实现带格式复制表格问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯