我正在尝试编辑几个 excel 文件(.xls)而不更改工作表的其余部分。到目前为止,我发现的唯一接近的是 xlrd、xlwt 和 xlutils 模块。这些问题似乎 xlrd 在阅读时评估公式,然后将答案作为单元格的值。有谁知道保存公式的方法,这样我就可以使用 xlwt 写入文件而不会丢失它们?我在 Python 和 CLISP 方面拥有大部分经验,但如果他们有更好的支持,我可以很快学会另一种语言。谢谢你提供的所有帮助!
4 回答
我遇到了同样的问题......最终找到了下一个模块:
from openpyxl import load_workbook
def Write_Workbook():
wb = load_workbook(path)
ws = wb.get_sheet_by_name("Sheet_name")
c = ws.cell(row = 2, column = 1)
c.value = Some_value
wb.save(path)
==> 这样做,我的文件保存了之前插入的所有公式。
希望这可以帮助!
截至目前,xlrd 不读取公式。不是它评估它们,它根本不读取它们。
目前,最好的办法是通过 pywin32 或 Visual Basic 或 VBScript(或其他一些具有 COM 接口的 Microsoft 友好语言)以编程方式控制 Excel 的运行实例。如果您不能运行 Excel,那么您可以使用 OpenOffice.org 来做类似的事情。
我们刚刚遇到了这个问题,我们能做的最好的事情就是手动将公式重写为文本,然后在输出时将它们转换为正确的公式。
所以打开 Excel 并替换=SUM(C5:L5)
为"=SUM(C5:L5)"
包含引号。如果您的公式中有双引号,请将其替换为 2 个双引号,因为这将转义它,因此= "a" & "b"
变为"= ""a"" & ""b"" "
)
然后在您的 Python 代码中,遍历源和输出表中的每个单元格并执行以下操作:
output_sheet.write(row, col, xlwt.ExcelFormula.Formula(source_cell[1:-1]))
我们使用这个 SO 答案将源表的副本作为输出表,甚至保留样式,并避免覆盖上面的手写文本公式。
我之前使用过该xlwt.Formula
功能,以便能够将超链接放入单元格中。我想它也适用于其他公式。
更新:这是我在一个项目中找到的一个片段:
link = xlwt.Formula('HYPERLINK("%s";"View Details")' % url)
sheet.write(row, col, link)