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

Python实现Excel表格数据复制到Word表格时遇TypeError问题求助

问题解决:TypeError: list indices must be integers or slices, not str

错误原因

你用df.to_dict("records")得到的sda是字典组成的列表,每个元素对应Excel里的一行数据。比如sda[0]是第一行的字典,包含"ORDER"、"ITEM"等键。直接用sda["ORDER"]会报错,因为列表只能用整数或切片索引,不能用字符串。

另外你的代码逻辑还有两处问题:

  • 嵌套遍历Table.rows和rows.cells完全没必要,你需要的是把Excel的每一行数据对应到Word表格的一行单元格
  • 用rows.cells[0]这种单元格对象作为字典键是错误的,核心需求应该是给单元格赋值,而非构建这种无效字典

修正后的代码

import pandas as pd
from docx import Document
from pathlib import Path

base_dir = Path(__file__).parent
word_template_path = base_dir / "WordTemplate.docx"
excel_path = base_dir / "ExcelSource.xlsx"
output_dir = base_dir / "OUTPUT"

# 创建输出目录
output_dir.mkdir(exist_ok=True)

# 读取Excel数据为DataFrame
df = pd.read_excel(excel_path, sheet_name="Feuil2")

# 转换为字典列表(每个元素是一行数据的字典)
sda = df.to_dict("records")

# 加载Word模板
doc = Document(word_template_path)
# 获取第一个表格
table = doc.tables[0]

# 遍历Excel的每一行数据,添加到Word表格
for row_data in sda:
    # 向表格添加新行
    new_row = table.add_row().cells
    # 给每个单元格赋值(转成字符串适配Word单元格要求)
    new_row[0].text = str(row_data["ORDER"])
    new_row[1].text = str(row_data["ITEM"])
    new_row[2].text = str(row_data["Q1"])
    new_row[3].text = str(row_data["Q2"])
    new_row[4].text = str(row_data["PRICE"])
    new_row[5].text = str(row_data["TVA"])
    new_row[6].text = str(row_data["TOTAL"])

# 保存生成的Word文档
output_path = output_dir / "result.docx"
doc.save(output_path)

额外说明

  • 如果你的Word模板表格已有表头行,上述代码会在表头下方追加数据行,符合常规使用场景
  • 用str()转换是因为Excel中的数值类型(数字、浮点数)不能直接赋值给Word单元格的text属性,必须转为字符串
  • 若需要替换模板表格的现有数据(而非追加),可先删除表头外的所有行,再添加新数据:
# 删除现有数据行(保留表头)
for row in table.rows[1:]:
    table._element.remove(row._element)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:03:14