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

