如何用Pandas修改Excel文件并保留原有格式布局?
保留Excel原有格式修改数据的解决方案
你的代码会丢失原格式,是因为直接新建了Excel文件,而非基于原文件的已有格式进行修改。以下是可行的解决方法:
方法一:基于原工作簿写入数据(保留全表格式)
通过openpyxl先加载原文件的工作簿,再用Pandas写入数据,这样能完整保留原文件的格式布局:
from pathlib import Path import pandas as pd from openpyxl import load_workbook # 定义目标文件路径 file_path = Path.cwd() / "file.xlsx" # 加载原Excel的工作簿(包含所有格式信息) wb = load_workbook(file_path) # 初始化ExcelWriter,指定已加载的工作簿,设置替换已有sheet writer = pd.ExcelWriter( file_path, engine='openpyxl', mode='a', if_sheet_exists='replace' ) # 将数据写入指定sheet,仅保留必要参数避免破坏格式 new_df.to_excel(writer, sheet_name='test', index=False) # 保存并关闭 writer.close()
关键说明:
load_workbook(file_path):完整读取原Excel的单元格样式、列宽、行高、合并单元格等所有格式mode='a':以追加模式打开文件,而非新建空白文件if_sheet_exists='replace':替换已存在的目标sheet,避免重复创建- 写入时仅传递
index=False等必要参数,不要随意修改header等设置,防止破坏原有表头格式
方法二:直接修改指定单元格(更精细控制)
如果只需要修改原表中的部分单元格而非整表替换,可以直接用openpyxl操作单元格,完全保留原格式:
from pathlib import Path from openpyxl import load_workbook file_path = Path.cwd() / "file.xlsx" wb = load_workbook(file_path) ws = wb['test'] # 修改指定单元格的值,格式完全保留 ws['B2'] = "新的数值" ws['C3'] = 12345 # 保存文件 wb.save(file_path)
注意事项:
- 确保已安装
openpyxl:执行pip install openpyxl完成安装 - 修改整表时,要保证
new_df的列数、列顺序和原sheet一致,否则可能导致格式错位 - 原文件中的宏、VBA代码无法通过此方法保留,若需要保留宏需使用
engine='xlwings'等支持宏的引擎
内容的提问来源于stack exchange,提问作者Inuyasha84
相关产品推荐
相关产品推荐

