解决Pandas生成Excel带索引、OpenPyXL追加行无索引的不一致问题
解决Pandas生成Excel与OpenPyXL追加行的索引不一致问题
针对Pandas生成的Excel带A列索引、OpenPyXL追加行无索引的格式不一致问题,提供三种可行解决方案:
方案1:生成Excel时直接不写入索引(推荐)
修改Pandas写入Excel的代码,添加index=False参数,让初始数据不生成A列索引,后续追加行时直接对应列写入即可保持格式统一。
修改后的code1:
import pandas as pd import os print("l_vars_init:", l_vars_init) data = pd.DataFrame(l_vars_init, columns=["Tilasto", "Taulukko", "Luontipäivä"]) # 创建media目录(如果不存在) if not os.path.exists("media"): os.makedirs("media") # 写入Excel时不包含索引列 data.to_excel(path, index=False)
对应的code2调整列位置(此时数据从A列开始):
import openpyxl wb = openpyxl.load_workbook(path) ws = wb.active max_row = ws.max_row # 写入对应列 ws.cell(max_row + 1, 1).value = stat ws.cell(max_row + 1, 2).value = rdf_id ws.cell(max_row + 1, 3).value = "2023-10-16" # 注意加引号,避免被解析为数值计算 wb.save(path)
方案2:为追加的行补充索引值
如果需要保留A列索引,在追加行时给A列补充连续的索引值,取现有最后一行索引的下一个整数即可。
修改后的code2:
import openpyxl wb = openpyxl.load_workbook(path) ws = wb.active max_row = ws.max_row # 获取最后一行索引值,加1作为新行索引 last_index = ws.cell(row=max_row, column=1).value new_index = last_index + 1 if last_index is not None else 0 # 写入索引列 ws.cell(max_row + 1, 1).value = new_index # 写入数据列 ws.cell(max_row + 1, 2).value = stat ws.cell(max_row + 1, 3).value = rdf_id ws.cell(max_row + 1, 4).value = "2023-10-16" wb.save(path)
方案3:移除已生成Excel中的初始索引列
如果已经生成带索引的Excel,可通过两种方式移除A列索引:
方法1:用Pandas重写Excel
import pandas as pd # 读取现有Excel,跳过原索引列 df = pd.read_excel(path, index_col=0) # 保存时不写入索引 df.to_excel(path, index=False)
方法2:用OpenPyXL直接删除A列
import openpyxl wb = openpyxl.load_workbook(path) ws = wb.active # 删除A列 ws.delete_cols(1) wb.save(path)
删除后后续追加行直接从A列开始写入数据即可。
内容的提问来源于stack exchange,提问作者Jaana
相关产品推荐
相关产品推荐

