尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Excel复制到吐血?Python一招教你连合并单元格和格式一起带走

Excel复制到吐血?Python一招教你连合并单元格和格式一起带走
📅 发布时间:2026/7/20 11:44:32

场景

工作里, 我们有时会把一个 excel 中的 sheet 复制到一个新的 excel 中, 这要是正使用中的, 通常能轻松达成这点。然而, 一旦碰到有着包含合并单元格的多级表头的 excel, 要来处理就繁杂许多了, 而我们更偏向借助库并结合起来去处理数据。此类时候便会出现一个问题: 你能够发觉, 复制之际, 依照网上那种办法, 一般仅仅会复制数据, 可数据格式以及合并单元格、边框等全都被丢弃不见了, 结果致使复制表格这个操作以失败告终。

代码如下:

import openpyxl # 打开源Excel文件和工作表 source_workbook = openpyxl.load_workbook('source.xlsx') source_sheet = source_workbook.active # 创建目标Excel文件和工作表 target_workbook = openpyxl.Workbook() target_sheet = target_workbook.active # 复制数据和格式 for row in source_sheet.iter_rows(values_only=True): target_sheet.append(row)

上面所提及的代码, 仅仅是复制了数据, 然而, 却并未复制数据格式, 以及合并单元格这类表格样式。

跨工作簿带格式复制分类

从工作簿之外带着格式进行复制操作, 总体而言大致可以划分成两类情形: 其一, 直接从文件里读取相关内容, 接着实施复制;其二, 已经借助库把数据读取到内存当中, 在经过数据方面的处理之后, 需要将工作表复制到一个全新的电子表格里予以保存。

第一类:

第一种偏简单, 于互联网络之上亦能瞅见好多汇总, 我这儿亦寻觅到其中之一予以举个例子:

# 代码1:带格式复制一个sheet到另一个sheet from openpyxl import load_workbook import xlwings as xw app = xw.App(visible=False, add_book=False) source_workbook = app.books.open('原表.xlsx') target_workbook = app.books.open('target.xlsx') sheet_name = source_workbook.sheets['汇总'] # 要复制的工作表名称 target_worksheet = target_workbook.sheets[0] sheet_name.copy(before=target_worksheet) target_workbook.save() target_workbook.close() source_workbook.close() app.quit()

以下代码能够把一个表格, 其文件名为“原表.xlsx”, 以及 sheet 名为“汇总”, 进行原样复制,复制到一个文件名为: “.xlsx”的文件里头, 大家能够自己去测试。

第二类:

然而, 在面临要针对数据展开处理, 接着将带格式的数据复制至另外一个excel文件之际, 第一种情形所给出的代码就显得极为棘手了。不多作言语赘述, 直接呈上案例。如下呈现一幅图, 图中有一个名称为有那么一个名为“.xlsx”这样子工作簿, 它的里面涵盖两个sheet, 这两个sheet各自的名称分别是这些: “汇总”以及“清单”。

此刻, 我们期望依据“州名”这一列当中的值, 对.xlsx工作簿给予拆分,进而生成若干个全新的工作簿。就以州名“威斯康星州”来当作例子, 所生成的新文件是“威斯康星州.xlsx”。情形如图所示。

想做上述操作, 得先把原表.xlsx读取进来, 针对这种含有合并单元格的表来处理, 我觉着自身更拿手。于是呢, 我运用()办法把.xlsx读进内存, 先是取出“汇总”表来进行数据处理, 拆分成一个州对应一个文件, 此时就得先暂存于列表之中, 接着再取出“清单”表来做数据处理, 同样保存到一个列表里面, 最终我遍历两个列表, 把一个州的汇总以及清单表放置到一个文件里保存。这会儿使用网上的教程, 要么缺失格式, 要么缺少合并单元格, 要么缺少列宽。我所给出的程序, 能够把原表的全部格式依照原本样子复制至新表, 可以这么说。然而更要重视的是, 对于存有合并单元格的列宽, 程序没办法完完全全拿取到, 部分列的列宽设置了默认数值, 也许不能够全然跟原表保持一致, 像这样的代码如下:

def copy_sheet_to_sheet(old_sht, new_sht): for i in range(1,old_sht.max_row+1): # 最大行+1 for j in range(1, old_sht.max_column+1): #最大列+1 src_cell = old_sht.cell(i, j) # getattr(ws.cell(row=m,column=c),"value") new_sht.cell(row=i,column=j).value=src_cell.value if src_cell.has_style: #拷贝格式 new_sht.cell(row=i, column=j).font = copy(src_cell.font) new_sht.cell(row=i, column=j).border = copy(src_cell.border) new_sht.cell(row=i, column=j).fill = copy(src_cell.fill) new_sht.cell(row=i, column=j).number_format = copy(src_cell.number_format) new_sht.cell(row=i, column=j).protection = copy(src_cell.protection) new_sht.cell(row=i, column=j).alignment = copy(src_cell.alignment) if old_sht.merged_cells: # 获取合并单元格的边界 print(old_sht.merged_cells) for mergecell in old_sht.merged_cells: print(str(mergecell)) # 在新工作簿中创建合并单元格 new_sht.merge_cells(str(mergecell)) # 遍历所有可能的列 for col_idx in range(1, old_sht.max_column + 1): col_letter = get_column_letter(col_idx) if col_letter in old_sht.column_dimensions: # 列存在且有明确定义的宽度 column_width = old_sht.column_dimensions[col_letter].width # print(f"Column {column} has width: {column_width}") new_sht.column_dimensions[col_letter].width = column_width else: # 列存在但没有明确定义的宽度,可以设置一个默认值 new_sht.column_dimensions[col_letter].width = 14.35

相关新闻

  • Hitboxer终极指南:如何用免费开源工具彻底解决游戏方向键冲突
  • 本地文件智能问答:LangChain+RAG离线落地实战
  • 生产级机器学习系统:从模型部署到决策可信的工程实践

最新新闻

  • JSP自定义标签深度解析:从原理到实战,掌握视图层组件化核心
  • [具身智能-588]:RS422、I2C、SPI 底层都是面向字节传输,都是主从模式,都可以 1 对多。他们各自如何区分从设备的? 如何在单字节基础上传输目标设备特定地址空间的?
  • 瑞德克斯平台:从风险提示切入的路径归纳
  • 基于空间殖民算法的交互式单木点云分割:C++实现与工程实践
  • 金华管道疏通选哪家 2026金华全域正规疏通商家TOP5综合测评榜单 - 北京金修达天津维修部
  • [具身智能-589]:RS485 / I2C / SPI / CAN 总线完整选型对比

日新闻

  • Python开发内部工具:7大核心库实战解析
  • 合肥雷达官方2026年7月最新信息:客户服务网点地址与售后热线权威公示 - 亨得利官方服务中心
  • PCA实战指南:从变量纠缠诊断到主成分业务解读

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号