You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python高效复制粘贴27MB(27k行)的大型Excel文件?

优化Excel数据复制性能的方案

原代码的核心问题是逐单元格循环读写,openpyxl对单个单元格的操作开销极高,面对27000行+数百列的量级,必然会极慢。以下是几种高效的优化方案:

方案1:用openpyxl批量读写(无需换库)

通过iter_rows批量读取源工作表的所有数据,再一次性写入目标工作表,大幅减少循环次数和单元格操作开销:

import openpyxl as xl

# 用原始字符串避免路径转义问题
filename = r"C:\Users\livin.vincent\OneDrive - Automation Anywhere\Desktop\New folder\New Microsoft Excel.xlsx"
filename1 = r"C:\Users\livin.vincent\OneDrive - Automation Anywhere\Desktop\New folder\New Microsoft Excel Worksheet.xlsx"

# 只读模式加载源文件,跳过格式等非必要数据,提升读取速度
wb1 = xl.load_workbook(filename, read_only=True)
ws1 = wb1.worksheets[0]

# 常规模式加载目标文件
wb2 = xl.load_workbook(filename1)
ws2 = wb2.worksheets[0]

# 批量读取所有行的单元格值
all_rows = list(ws1.iter_rows(values_only=True))

# 逐行写入目标工作表,比逐单元格操作快数十倍
for row_idx, row_data in enumerate(all_rows, start=1):
    for col_idx, cell_value in enumerate(row_data, start=1):
        ws2.cell(row=row_idx, column=col_idx).value = cell_value

wb2.save(filename1)
wb1.close()  # 只读模式打开的文件需手动关闭

关键优化点:

  • read_only=True跳过格式解析,大幅降低源文件加载耗时
  • iter_rows(values_only=True)一次性获取所有数据,减少单次单元格访问的底层开销

方案2:用Pandas处理(大数据量最优解)

Pandas对表格数据的读写做了深度优化,面对大体积Excel,通常几秒就能完成复制:

import pandas as pd

filename = r"C:\Users\livin.vincent\OneDrive - Automation Anywhere\Desktop\New folder\New Microsoft Excel.xlsx"
filename1 = r"C:\Users\livin.vincent\OneDrive - Automation Anywhere\Desktop\New folder\New Microsoft Excel Worksheet.xlsx"

# 读取源工作表数据
df = pd.read_excel(filename, sheet_name=0)

# 写入目标文件的指定工作表,替换原有内容
with pd.ExcelWriter(filename1, mode='a', engine='openpyxl', if_sheet_exists='replace') as writer:
    df.to_excel(writer, sheet_name=list(writer.sheets.keys())[0], index=False)

注意事项:

  • 需先安装依赖:pip install pandas openpyxl
  • Pandas默认不保留单元格格式(如颜色、公式),仅适合纯数据复制场景
  • 若需要追加数据,可将if_sheet_exists='replace'改为'overlay',需注意行号冲突

方案3:直接复制工作表(需保留格式时使用)

如果允许替换目标工作表,用openpyxl的工作表复制功能,底层批量操作速度极快,还能保留格式:

import openpyxl as xl

filename = r"C:\Users\livin.vincent\OneDrive - Automation Anywhere\Desktop\New folder\New Microsoft Excel.xlsx"
filename1 = r"C:\Users\livin.vincent\OneDrive - Automation Anywhere\Desktop\New folder\New Microsoft Excel Worksheet.xlsx"

wb1 = xl.load_workbook(filename)
ws1 = wb1.worksheets[0]

wb2 = xl.load_workbook(filename1)
# 删除原有目标工作表
target_sheet_name = wb2.sheetnames[0]
del wb2[target_sheet_name]
# 复制源工作表到目标文件,并重命名为原工作表名
new_ws = wb2.create_sheet(title=target_sheet_name, index=0)
# 批量复制单元格数据和格式
for row in ws1.iter_rows():
    for cell in row:
        new_ws[cell.coordinate].value = cell.value
        new_ws[cell.coordinate].style = cell.style

wb2.save(filename1)

内容的提问来源于stack exchange,提问作者Livin Vincent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:39:32