使用Python(openpyxl)将CSV数据导入Excel模板并另存新文件
解决方案:将CSV数据导入Excel模板并保存为新文件
没问题,我来帮你完善代码,实现把CSV数据导入Excel模板的指定工作表,并且保留原模板文件的需求。以下是完整的可运行代码,以及关键步骤的解释:
完整代码
import pandas as pd from openpyxl.utils.dataframe import dataframe_to_rows import openpyxl # 读取你的CSV数据文件(替换为实际路径) csv_df = pd.read_csv("your_input.csv") # 加载Excel模板文件,保留原格式和样式 template_wb = openpyxl.load_workbook("template.xlsx") # 获取模板中名为"data"的目标工作表 target_ws = template_wb["data"] # 将CSV数据从工作表的第二行开始写入 # 跳过DataFrame的索引和表头,仅写入纯数据行 for row_num, row_data in enumerate(dataframe_to_rows(csv_df, index=False, header=False), start=2): for col_num, cell_value in enumerate(row_data, start=1): target_ws.cell(row=row_num, column=col_num, value=cell_value) # 保存为新文件,原模板文件不会被修改 template_wb.save("result.xlsx")
关键细节说明
- 保留模板格式:使用
openpyxl.load_workbook加载模板,而不是用pandas直接写入,这样能完整保留模板中的单元格样式、公式、格式设置,避免丢失原有排版。 - 精准写入位置:通过
enumerate(..., start=2)让数据从第二行开始写入,正好对应模板第一行的表头下方,不会覆盖表头内容。 - 数据匹配:
dataframe_to_rows的index=False和header=False参数确保只写入CSV中的纯数据,不会把DataFrame的索引和表头重复写入模板(因为模板已经有自己的表头了)。 - 不修改原模板:最后保存为
result.xlsx,原template.xlsx文件完全不受影响。
注意事项
- 请把代码中的
your_input.csv替换为你实际的CSV文件路径。 - 确保模板中确实存在名为
data的工作表,且CSV的列数和该工作表的列数一致,避免数据错位。 - 如果CSV数据中有特殊格式(比如日期、数字格式),openpyxl会尽量保留数据类型,但如果需要更精准的格式控制,可以额外添加单元格格式设置的代码。
内容的提问来源于stack exchange,提问作者Arpit Sharma
相关产品推荐
相关产品推荐

