如何使用 xlwt 写入现有 excel 文件并保持格式?

How do I write to an existing excel file using xlwt and keep the formatting?

我正在尝试更改 excel 文件中的数字(并最终将多个 excel 文件放在一个循环中)。我想编辑文件并将其另存为新文件,我已成功完成。问题是我保存的新文件去掉了旧 excel 文件的所有格式。如果我错了请纠正我:但我不能使用 Openpyxl,因为它只适用于 .xlsx 文件(我正在使用的所有文件都是 .xls)。

我调查了 pandas 但未能找到解决方案。我最熟悉 xlrdxlwt,但如果它能解决问题,我愿意尝试任何其他库。

import xlrd
from xlutils.copy import copy
from xlrd import *
# To open Workbook 
loc = (r"X:\Projects\test.xls") 
wb = xlrd.open_workbook(loc)
dose = wb.sheet_by_index(13)
manu = dose.cell_value(4,3)
#writing 675
w = copy(open_workbook(loc))
if manu == "Hologic":
    w.get_sheet(13).write(5,3,675)
    w.save('book2.xls')

同样,代码运行没有任何错误。但是新的 .xls 文件没有格式。格式对这个项目至关重要,所以我不能丢失任何格式。

你可能做不到。 Microsoft 创建 xlsx 文件是有原因的:经典的 xls 格式是一种遗留的二进制文件,堆积了数百甚至数千个功能,每个功能都以不同的方式表示(并且文件格式甚至没有公开记录当年不知道现在是不是)。因此,有 一个 应用程序可以打开 xls 文件并保证呈现文件创建者想要的所有功能的内容:Excel。以及创建该文件的相同 Excel 版本。

因此,任何可以写入 xls 的打开的库都将创建最基本的文件,没有格式 - 如果它可以解析出内容部分,那就幸运了。

另一方面,

xlsx 文件在内部使用符合 xml 的文件,即使是不关心完整规范的程序也可以更改文件中的信息并保留格式和其他只需不接触任何它不知道的东西,然后再次组装一个有效的 xml

也就是说,如果您不能转换为 xlsx,也许更简单的方法是使用 Python 驱动 Excel 本身为您进行更改,在一种自动化的方式。 关于它的文档很少而且相差甚远,但是可以通过使用 pywin32 和 "COM" api - 从这里开始看:https://pbpython.com/windows-com.html

另一个选择是使用 LibreOffice - 它可以读取和写入带格式的 xls 文件(尽管肯定会有损失),并且可以在 Python 中编写脚本。不幸的是,关于如何使用 Python 编写 LibreOffice 脚本的信息也很难找到,并且使用他们的 "UNO" 东西来启用与 Python 交互的遗留选项使得它的使用变得复杂.