我正在尝试编辑多个excel文件(.xls)而不更改工作表的其余部分。到目前为止,我发现的唯一关闭的是xlrd,xlwt和xlutils模块。这些问题似乎是xlrd在读取时评估公式,然后将答案作为单元格的值。有没有人知道保存公式的方法所以我可以使用xlwt写入文件而不会丢失它们?我拥有Python和CLISP的大部分经验,但如果他们有更好的支持,可以很快地学习另一种语言。感谢您提供任何帮助!
答案 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)
截至目前,xlrd不会读取公式。不是它评估它们,它根本就不读它们。
目前,您最好的选择是通过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制作源表的副本作为输出表,甚至可以保留样式,并避免从上面覆盖手写文本公式。