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

如何将Pandas DataFrame从指定单元格开始追加到现有Excel文件?

问题

现有如下结构的Pandas DataFrame:

0    1     2
0  0.1  0.2   0.3
1  0.2  0.3   0.4
2  0.3  0.4   0.5
3  0.4  0.5   0.6

需要将其追加到现有Excel文件test1.xlsx的Sheet1中,从D2单元格开始写入所有列,但当前代码仅能写入第一列:

wb = load_workbook('test1.xlsx')

ws = wb['Sheet1']

for index, row in newdf.iterrows():
    cell = 'D%d'  % (index + 2)
    ws[cell] = row[0]

wb.save('test1.xlsx')

当前生成的Excel内容:

A B C D
1
2     0.1
3     0.2
4     0.3
5     0.4

预期实现效果:

A B C D   E    F
1
2     0.1 0.2  0.3
3     0.2 0.3  0.4
4     0.3 0.4  0.5
5     0.4 0.5  0.6

解决方案

原代码只写入了每行的第一个元素(row[0])且固定了D列,要写入所有列,需要遍历每行的每个元素并对应到正确的列(D、E、F...)。以下是两种可行的修改方式:

方法1:通过列索引转换赋值

from openpyxl import load_workbook

wb = load_workbook('test1.xlsx')
ws = wb['Sheet1']

# 起始列是D,对应openpyxl的列编号为4(列从1开始计数)
start_col_num = 4
for df_row_idx, row in newdf.iterrows():
    # Excel行号从2开始,对应DataFrame的第0行
    excel_row = df_row_idx + 2
    for df_col_idx, value in enumerate(row):
        # 计算目标列编号
        target_col_num = start_col_num + df_col_idx
        # 转换为Excel列字母(如4→D)
        target_col_letter = ws.cell(row=1, column=target_col_num).column_letter
        # 拼接单元格地址并赋值
        ws[f"{target_col_letter}{excel_row}"] = value

wb.save('test1.xlsx')

方法2:直接按行列数字赋值(更高效)

无需转换列字母,直接通过行列编号赋值,代码更简洁:

from openpyxl import load_workbook

wb = load_workbook('test1.xlsx')
ws = wb['Sheet1']

start_col_num = 4  # D列的编号(openpyxl列从1开始)
for df_row_idx, row in newdf.iterrows():
    excel_row = df_row_idx + 2
    for df_col_idx, value in enumerate(row):
        target_col_num = start_col_num + df_col_idx
        # 直接指定行列赋值
        ws.cell(row=excel_row, column=target_col_num, value=value)

wb.save('test1.xlsx')

关键说明

  • 原代码的问题在于仅处理了每行的第一个元素,且固定写入D列,因此只生成了第一列数据。
  • 两种方法都会遍历DataFrame的所有元素,根据起始位置(D2,即行2、列4)计算每个元素的目标单元格,从而完整写入所有列。
  • 方法2省略了列字母转换步骤,执行效率更高,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:05:18