使用Python、Openpyxl和Pandas向Excel插入行并填充DataFrame数据
解决方案
核心逻辑
先定位目标插入位置(数据末尾或指定国家之间),为每个目标国家插入2行(分别存放Fact描述和Amount数值),再从DataFrame中提取对应数据填充到指定单元格。
代码实现(基于常见场景)
假设你的DataFrame包含Country、Fact、Amount三列,现有Excel的A列存储国家名称,B列存储Fact内容或数值:
1. 导入依赖并加载数据
import pandas as pd import openpyxl # 替换为你的实际DataFrame数据 df = pd.DataFrame({ "Country": ["阿尔及利亚", "阿尔巴尼亚", "西班牙"], "Fact": ["北非面积最大国家", "巴尔干半岛国家", "南欧沿海君主立宪制国家"], "Amount": [45000000, 2800000, 47000000] }) # 加载目标Excel工作簿 wb = openpyxl.load_workbook("Country_Facts.xlsx") ws = wb.active # 若需指定工作表,改用 wb["你的工作表名称"]
2. 在现有数据末尾插入(最通用场景)
# 获取现有数据的最后一行行号 last_row = ws.max_row # 逐个处理DataFrame中的目标国家 for _, country_data in df.iterrows(): # 插入2行:一行存国家+Fact,一行存数值 ws.insert_rows(last_row + 1, amount=2) # 填充第一行(国家+Fact) ws.cell(row=last_row + 1, column=1, value=country_data["Country"]) ws.cell(row=last_row + 1, column=2, value=country_data["Fact"]) # 填充第二行(A列留空,B列存Amount) ws.cell(row=last_row + 2, column=2, value=country_data["Amount"]) # 更新最后一行位置,为下一个国家插入做准备 last_row += 2 # 保存修改后的文件 wb.save("Country_Facts_updated.xlsx")
3. 插入到指定国家之间(示例:在「法国」之后插入)
如果需要精准插入到某个国家的后面,先定位目标国家的行号:
# 查找「法国」所在的行号 target_row = None for row_num, row in enumerate(ws.iter_rows(min_row=1, values_only=True), start=1): if row[0] == "法国": target_row = row_num break if target_row: # 在法国行后插入2行 ws.insert_rows(target_row + 1, amount=2) # 填充阿尔及利亚的数据(如需批量处理,可套入循环) algeria_data = df[df["Country"] == "阿尔及利亚"].iloc[0] ws.cell(row=target_row + 1, column=1, value=algeria_data["Country"]) ws.cell(row=target_row + 1, column=2, value=algeria_data["Fact"]) ws.cell(row=target_row + 2, column=2, value=algeria_data["Amount"]) wb.save("Country_Facts_updated.xlsx")
踩坑提示
- 操作Excel时必须关闭文件,否则会触发权限错误
- 若国家名称存在格式差异(如空格、全半角不一致),先统一处理:
df["Country"] = df["Country"].str.strip() - 确保安装了最新版openpyxl:
pip install --upgrade openpyxl
内容的提问来源于stack exchange,提问作者user18233539
相关产品推荐
相关产品推荐

