使用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
相关产品推荐
相关产品推荐

