目前有哪些Python库支持修改xlsx文件并保留源格式?

需求

  • 简单来说就是,已有一个设置过极其复杂的格式的 excel,需要增减改部分数据。
  • 具体是,把数据库数据处理后导入 excel。
    然后对 excel 做了一系列调整,以优化阅读。
    比如条件格式、超链接、单元格格式、分组、等等,需要修改的同时保留源格式。

遇到的问题

  • pandas 等轮子只能写新文件。
  • xlsxwriter 这种可以插图的,不支持复杂格式,而且也只支持新建。
  • xlutils 只支持 xls,不支持 xlsx。
  • 有些轮子也支持自定义个单元格大小颜色啥的,但支持得不全面。

请教

感觉是个挺常用的功能,但实在遍寻不到可用的轮子,有大神能指条明路嘛?

  • 修改 xlsx 文件。
  • 仅修改单元格内容,保留源格式。

目前有哪些Python库支持修改xlsx文件并保留源格式?

27 回复

现在暂用的村炮方案是,把表格内容如下复制到剪贴板,然后手动黏贴一次。
a\t123\n
b\t234\n
…\t…\n


对于修改.xlsx文件并保留格式,我主要用openpyxlxlwings

1. openpyxl 这是最常用的库,能读写单元格值、公式、图表,还能保留大部分格式(字体、颜色、边框、列宽等)。不过它对Excel高级功能(如数据透视表、宏)支持有限。

from openpyxl import load_workbook

# 加载工作簿,保留所有格式
wb = load_workbook('source.xlsx')
ws = wb.active

# 修改A1单元格的值和格式
ws['A1'].value = "新数据"
ws['A1'].font = Font(name='微软雅黑', size=12, bold=True)

# 保存文件(自动保留未修改的原有格式)
wb.save('modified.xlsx')

2. xlwings 这个库通过COM接口与Excel交互,能100%保留格式和所有Excel功能,但需要安装Excel软件。

import xlwings as xw

app = xw.App(visible=False)  # 后台运行
wb = app.books.open('source.xlsx')
ws = wb.sheets[0]

# 修改内容
ws.range('A1').value = "新数据"
ws.range('A1').font.name = '微软雅黑'
ws.range('A1').font.bold = True

wb.save('modified.xlsx')
wb.close()
app.quit()

简单总结: 纯Python环境用openpyxl,需要完整Excel功能就用xlwings

openpyxl?

试试 xlwings。
如果也满足不了你的需求的话,提供一个思路:在 Excel 里先用 VBA 写你想要的方法,例如在某位置设置某格式,然后用 xlwings 的 macro 方法去调用 VBA 方法,传入数据和参数。
https://docs.xlwings.org/en/stable/api.html#xlwings.Book.macro

我觉得直接写 vba 会更快啊。只是 crud 数据,用 vba 更好。

只要不是用 excel 原生功能的,多少都有问题。如果没有额外需求但是必须要 py 的话,建议直接生成一个新的

造轮子吧,xlsx 格式比 xls 更好理解,zip 解压出来就是 xml,直接操作 xml 再 zip 压缩。

openpyxl 支持有简单格式的 excel 文件的修改,但复杂格式会丢失

python 操作 office 的所有开源库,看下哪一个合适: https://www.21doc.net/python/awesomepython

Python 这方面没有好用的,都是鸡肋

其实直接用 comtypes,或者 pywin 操作原文件还是比较简单的

可以调用 c++的[libxl]( http://www.libxl.com),这个库有多个平台,给钱的话也有源码。

现在怎么都找现有的轮子

当成 xml 自己处理?

如果你在 windows 平台上,可能有办法处理,参考这个看看有没有用: http://pythonexcels.com/python-excel-mini-cookbook/

非 windows 平台我觉得目前的库都不行( openpyxl,pyexcel )

用 .net 做吧

openpyxl 挺好用的,不过也有些坑

java 这边也没啥好用的,都很难受就是了。

python 没有库可以 应该也没有微软以外的库可以
你当 office 是啥

所以想要完整的应该只有 win 下 c#的才行

目前 golang 的有一个库,360 写的不错: https://github.com/360EntSecGroup-Skylar/excelize
https://xuri.me/excelize/zh-hans/
你可以打包成".so"文件然后用 python ctype 去调用

vba 比较好,原生的

win32api ?

回到顶部