如何基于指定Excel单元格区域生成并导出目标格式CSV文件
解决方案:提取Excel指定单元格并导出CSV
用Pandas实现(适配iat方法)
直接通过iat按位置索引提取目标单元格,整理成结构后导出CSV,代码简洁高效:
import pandas as pd # 读取工作表,header=None表示不把首行当表头 df = pd.read_excel("Calculation - (Vodafone) July 22.xlsx", sheet_name="PPD Summary", header=None) # 提取目标单元格:iat[row_index, col_index],索引从0开始(B是第1列,5行对应索引4) b5 = df.iat[4, 1] b6 = df.iat[5, 1] f5 = df.iat[4, 5] f6 = df.iat[5, 5] g5 = df.iat[4, 6] g6 = df.iat[5, 6] # 搭配固定值整理成目标格式 output_data = [ [9999305, b5, f5, g5], [9999305, b6, f6, g6] ] # 转成DataFrame并导出CSV,index=False去掉行索引 pd.DataFrame(output_data, columns=["固定值", "B列数据", "F列数据", "G列数据"]).to_csv("output.csv", index=False, encoding="utf-8-sig")
用OpenPyXL实现(解决区域数据整理问题)
如果必须用OpenPyXL,直接定位单个单元格取值,再手动整理成CSV需要的行结构:
from openpyxl import load_workbook import csv # 加载工作簿,data_only=True确保读取公式计算后的值而非公式本身 wb = load_workbook("Calculation - (Vodafone) July 22.xlsx", data_only=True) ws = wb["PPD Summary"] # 直接通过单元格坐标取值(OpenPyXL索引从1开始,和Excel一致) b5 = ws["B5"].value b6 = ws["B6"].value f5 = ws["F5"].value f6 = ws["F6"].value g5 = ws["G5"].value g6 = ws["G6"].value # 整理成CSV需要的行格式 output_rows = [ ["固定值", "B列数据", "F列数据", "G列数据"], # 表头 [9999305, b5, f5, g5], [9999305, b6, f6, g6] ] # 写入CSV文件,newline=""避免空行,utf-8-sig兼容Excel中文显示 with open("output_openpyxl.csv", "w", newline="", encoding="utf-8-sig") as f: csv.writer(f).writerows(output_rows)
注意事项
- OpenPyXL读取带公式的单元格时,必须加
data_only=True,否则会返回公式字符串而非计算结果。 - 导出CSV用
utf-8-sig编码,能避免Excel打开时出现中文乱码。 - 可根据实际需求调整表头名称或数据列的顺序。
内容的提问来源于stack exchange,提问作者James Upson
相关产品推荐
相关产品推荐

