如何用Pandas更新Excel文件并保留原有格式参数?
解决Excel文件更新时保留格式与多工作表的问题
Pandas本身只专注数据处理,不支持保留Excel的格式(列颜色、尺寸等),而且read_excel默认只读取第一个工作表,to_excel会直接覆盖整个文件,所以你遇到的多表丢失、格式全无的情况是正常的。要实现“只加新行、保留原有格式和多工作表”,可以用下面两个专门操作Excel的库:
方案1:用openpyxl(纯Python,无需安装Excel)
openpyxl是专门处理xlsx格式文件的库,能直接读取并保留原文件的所有格式,适合没有安装Excel的服务器环境。
示例代码
from openpyxl import load_workbook # 1. 打开原Excel文件,data_only=False保留公式,仅需数据可设为True wb = load_workbook('my_file.xlsx', data_only=False) # 2. 定位要添加行的工作表,可指定表名如wb['销售数据'],默认选第一个表 ws = wb.active # 3. 获取当前数据的最后一行行号 last_row = ws.max_row # 4. 准备要添加的新行数据 new_data = [100, "张三", "研发部"] # 5. 在最后一行的下一行写入数据 ws.append(new_data) # 6. 保存文件,建议先备份原文件再操作 wb.save('my_file.xlsx')
注意事项
- 要操作多个工作表,直接通过
wb['工作表名']切换,其他工作表的内容和格式会原样保留 - 处理超大文件时,openpyxl会占用一定内存,提前备份更稳妥
方案2:用xlwings(需安装Excel,格式保留更完整)
xlwings直接调用本地Excel程序操作文件,能完美保留所有原生格式,甚至支持复杂Excel功能,适合有Excel客户端的场景。
示例代码
import xlwings as xw # 1. 启动Excel应用,visible=True可看到窗口,False则后台运行 app = xw.App(visible=True, add_book=False) # 2. 打开原文件 wb = app.books.open('my_file.xlsx') # 3. 定位目标工作表,可指定表名如wb.sheets['销售数据'],默认选第一个表 ws = wb.sheets[0] # 4. 获取最后一行的下一行行号,模拟Excel的Ctrl+↓操作 last_row = ws.range('A1').end('down').row + 1 # 5. 写入新数据,从A列开始填充 ws.range(f'A{last_row}').value = [100, "张三", "研发部"] # 6. 保存关闭文件,退出Excel wb.save() wb.close() app.quit()
注意事项
- 必须本地安装Excel软件才能使用xlwings
- 操作时Excel会真实打开,格式保留效果和原文件完全一致,适合处理有复杂格式的文件
内容的提问来源于stack exchange,提问作者VB666
相关产品推荐
相关产品推荐

