从xlsx文件中读取Python的值公式

4
我在读取xslx文件中的公式值时遇到了问题。我使用了openpyxl来获取值,但是当我想要获取值时,却显示为“None”。 以下是我的代码:
from openpyxl import *
wb = load_workbook('output.xlsx', data_only=True)
sh = wb["Sheet1"]
val=(sh['C5'].value)

文件output.xlsx包含公式“C5=A1+B1”,单元格C5的值为2,但我无法获得这个值。 有人可以帮助我吗? 可能需要其他库来读取xslx文件中公式的值。可能有一个示例如何做到这一点? 我知道可以将此文件转换为其他格式进行阅读,但对于此任务不适用。

2个回答

5

有许多解决方案可以获取Excel单元格的值。这完全取决于您所处的环境来获取计算后的单元格值。

如果您使用Excel创建xls或xlsx文件,通常单元格中会有一个值。虽然可能有关闭保存时重新计算的情况,但这是很平常的。如果有人关闭了保存时的重新计算,那么该值可能不正确。

如果xls或xlsx文件是由非Excel库(例如:openpyxl、xlwrt)创建的,并且除非您明确设置了单元格的值,否则它可能没有值。

感谢Python世界,有可选方案。

Pycelxlcalculator、DataNitro、FormulasSchedula可以读取Excel文件并计算单元格的公式。这些解决方案都不需要安装Excel。其中大部分可能独立于操作系统。

  • 我找不到DataNitro链接

免责声明:我是xlcalculator的项目所有者。

以下是使用xlcalculator的示例:

from xlcalculator import ModelCompiler
from xlcalculator import Model
from xlcalculator import Evaluator

filename = r'output.xlsx'
compiler = ModelCompiler()
new_model = compiler.read_and_parse_archive(filename)
evaluator = Evaluator(new_model)
val1 = evaluator.evaluate('Sheet1!C5')
print("value 'evaluated' for Sheet1!C5:", val1)

1

昨天我遇到了这个问题,并在stackoverflow上找到了一些相关帖子。请查看Charlie Clark的帖子Read Excel cell value and not the formula computing it -openpyxl

"openpyxl不会评估公式。当您使用openpyxl打开Excel文件时,您可以选择读取公式或最后计算的值。如果,如您所示,公式依赖于插件,则缓存的值永远无法准确。由于插件位于文件规范之外,因此它们永远不会得到支持。相反,您可能需要查看类似xlwings的东西,它可以与Excel运行时交互。"

使用xlwings读取公式单元格的值似乎是一个解决方案,但对我来说不起作用,因为xlwings只适用于Mac OS和Windows。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接