有没有办法使用Python保留公式编辑现有的Excel文件?

时间:2011-10-05 17:52:48

标签: python excel formula xlwt xlrd

我正在尝试编辑多个excel文件(.xls)而不更改工作表的其余部分。到目前为止,我发现的唯一关闭的是xlrd,xlwt和xlutils模块。这些问题似乎是xlrd在读取时评估公式,然后将答案作为单元格的值。有没有人知道保存公式的方法所以我可以使用xlwt写入文件而不会丢失它们?我拥有Python和CLISP的大部分经验,但如果他们有更好的支持,可以很快地学习另一种语言。感谢您提供任何帮助!

4 个答案:

答案 0 :(得分:7)

我遇到了同样的问题......最终找到了下一个模块:

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)

==>这样做,我的文件被保存,保留了之前插入的所有公式。

希望这有帮助!

答案 1 :(得分:1)

之前我使用xlwt.Formula函数可以获取进入单元格的超链接。我想它也适用于其他公式。

更新:这是我在我用过的项目中找到的代码段:

link = xlwt.Formula('HYPERLINK("%s";"View Details")' % url)
sheet.write(row, col, link)

答案 2 :(得分:1)

截至目前,xl​​rd不会读取公式。不是它评估它们,它根本就不读它们。

目前,您最好的选择是通过pywin32或Visual Basic或VBScript(或其他一些具有COM接口的Microsoft友好语言)以编程方式控制正在运行的Excel实例。如果您无法运行Excel,那么您可能会做一些与OpenOffice.org类似的事情。

答案 3 :(得分:1)

我们遇到了这个问题,我们能做的最好的事情就是手动将公式重新编写为文本,然后在输出时将它们转换为正确的公式。

所以打开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]))

我们使用this SO answer制作源表的副本作为输出表,甚至可以保留样式,并避免从上面覆盖手写文本公式。