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

使用openpyxl处理多Excel工作表后合并为Dataframe的技术求助

使用openpyxl预处理Excel工作表并合并数据

可以用openpyxl实现你需要的三个操作,以下是整合后的完整代码,包含你已完成的步骤和新增需求:

import openpyxl
import pandas as pd

# 加载工作簿
wb = openpyxl.load_workbook('data_sheets.xlsx')

for sheet in wb.worksheets:
    # 取消所有合并单元格
    for merge in list(sheet.merged_cells):
        sheet.unmerge_cells(range_string=str(merge))
    # 插入新列C
    sheet.insert_cols(3, 1)
    
    # 1. 提取第一行A列右侧8个字符(对应Excel公式=RIGHT(A1,8))
    unique_code = sheet['A1'].value[-8:] if sheet['A1'].value else ''
    
    # 2. 将编码填充至C列第6-282行
    for row_num in range(6, 283):  # range左闭右开,所以结束值设为283以覆盖282行
        sheet[f'C{row_num}'] = unique_code
    
    # 3. 删除第1-5行
    sheet.delete_rows(1, 5)
    
    print(f"处理完成:{sheet.title}")

# 保存预处理后的工作簿
wb.save('workbook_test.xlsx')

# 合并所有工作表数据(修正原代码的语法错误)
df = pd.concat(pd.read_excel('workbook_test.xlsx', sheet_name=None), ignore_index=True)
# 可按需保存合并后的结果
# df.to_excel('merged_data.xlsx', index=False)

关键步骤说明:

  • 提取编码:通过Python字符串切片[-8:]实现ExcelRIGHT(A1,8)的效果,增加空值判断避免报错。
  • 填充C列:用range(6,283)遍历目标行号,通过f'C{row_num}'快速定位单元格并赋值。
  • 删除行:调用openpyxl的delete_rows(start_row, amount)方法,一次性删除第1到5行。

另外修正了你原代码中pd.read_excel的语法错误(字符串引号未闭合),确保合并逻辑正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:35:10