如何从D列开始将DataFrame追加至含格式的Excel文件?
实现DataFrame从指定列追加到Excel并保留原有格式
需求说明
拥有Excel文件out_file和DataFramedfSave,需达成以下目标:
- 将DataFrame从D列开始追加到Excel的「Sheet 1」工作表
- 自动跳过已填充的行,仅在空白行的D列起始位置写入数据
- 不破坏Excel中原有的背景色、自动换行等格式(已知openpyxl默认从“未使用”行开始追加,需调整写入列的定位逻辑)
现有代码(待优化)
wb = load_workbook(filename=out_file) ws = wb["Sheet 1"] for r in dataframe_to_rows(dfSave, index=False, header=False): ws.append(r) wb.save(out_file)
表格状态说明
- 初始状态:A-C列已有带格式的填充内容,D列及对应行位为空白
- 最终状态:D列开始的对应行成功写入DataFrame数据,原有列的格式完全保留
优化后的代码实现
from openpyxl.utils.dataframe import dataframe_to_rows wb = load_workbook(filename=out_file) ws = wb["Sheet 1"] # 获取工作表中真正有数据的最大行号(自动忽略仅含格式的空行) max_data_row = ws.max_row # 遍历DataFrame行,从D列(第4列)开始逐单元格写入 for row_offset, df_row in enumerate(dataframe_to_rows(dfSave, index=False, header=False), start=1): target_excel_row = max_data_row + row_offset # 从第4列(D列)开始填充当前行的每个值 for col_offset, cell_value in enumerate(df_row, start=4): ws.cell(row=target_excel_row, column=col_offset, value=cell_value) wb.save(out_file)
代码逻辑说明
- 用
ws.max_row精准获取有数据的最大行,避免被仅含格式的空行误导 - 放弃
ws.append()整行追加的方式,改为定位到D列起始的单元格逐个赋值,确保写入位置准确 - 逐单元格赋值的操作不会覆盖原有列的格式,完美保留Excel中的背景色、自动换行等设置
内容的提问来源于stack exchange,提问作者Sergei
相关产品推荐
相关产品推荐

