计算Excel工作表而不打开它们(openpyxl或xlwt)

我做了一个脚本,打开一个xls。 文件,在其中写入一些新的值,然后保存该文件。

后来脚本再次打开它,并希望在包含公式的单元格中find答案。

如果我用openpyxl调用这个单元格,我得到公式(即:= A1 * B1)。 如果我激活data_only,我什么也得不到。

有没有办法让python来计算xls文件? (或者我应该尝试PyXll?)

实际上有一个项目需要Excel公式,并使用Python进行评估: Pycel 。 Pycel使用Excel本身(通过COM)来提取公式,所以在你的情况下,你会跳过这一部分。 该项目可能有用,你可以使用,但我不能担保其成熟或完整性。 它并不是真正为大众开发的。

另一种方法是将值公式写入单元格中(这样当读取文件时,只需将值拉出来,而不用担心公式)。 在撰写本文时,我还没有find在OpenPyXL中实现的方法,但是XlsxWriter可以做到这一点。 从文档 :

XlsxWriter不会计算公式的值,而是将值0存储为公式结果。 然后在XLSX文件中设置一个全局标志来表示在打开文件时应该重新计算所有的公式和函数。 这是Excel文档中推荐的方法,一般来说,它适用于电子表格应用程序。 但是,无法计算公式的应用程序(如Excel Viewer)或某些移动应用程序将仅显示0结果。

如果需要,还可以使用选项值参数指定公式的计算结果。 使用不计算公式值的非Excel应用程序时,这是偶尔需要的。 计算的值将添加到参数列表的末尾:

worksheet.write_formula('A1','= 2 + 2',num_format,4)

如果采用这种方法,则必须亲自计算公式的值(在Python脚本中),然后同时写入公式和值,如上面的文档中所示。 当需要读取值时,可以使用OpenPyXL的data_only选项。 (对于其他人阅读这个答案:如果你使用xlrd,那么只有这个值是可用的。)

不,在openpyxl中永远不会有。 我认为有一个Python库,声称实现这种formualae你可以使用的引擎。

我意识到这个问题是旧的,但我遇到了同样的问题,广泛的search没有得出答案。

这个解决scheme其实很简单,所以我会在这里为后人发表。

假设你有一个你用openpyxl修改过的xlsx文件。 正如查理·克拉克提到的, openpyxl不会计算公式,但是如果你要在excel中打开这个文件,公式将被自动计算。 所以你所要做的就是打开文件,然后用excel保存。

要做到这一点,你可以使用win32com模块。

 import win32com.client as win32 excel = win32.gencache.EnsureDispatch('Excel.Application') workbook = excel.Workbooks.Open(r'absolute/path/to/your/file') # this must be the absolute path (r'C:/abc/def/ghi') workbook.Save() workbook.Close() excel.Quit() 

而已。 我已经看到了所有这些使用Pycel或者Koala的build议,但是如果你需要做的只是告诉excel打开和保存,那看起来有点过分了。

授予此解决scheme只适用于Windows。