Что на самом деле произошло
У меня есть файл Excel (назовите его «test.xlsx») со следующим макетом:
Sheet1!A1 -> =NPV(0.1,B1:C1)
Sheet1!B1 -> 10
Sheet1!C1 -> 20
Я пытаюсь оценить ячейку Sheet1! A1 с следующий код в test.py
from pycel import ExcelCompiler
excel = ExcelCompiler(filename="test.xlsx")
print("A1 is %s" % excel.evaluate('Sheet1!A1'))
excel.set_value('Sheet1!B1', 200)
print('A1 is now %s' % excel.evaluate('Sheet1!A1'))
Это приводит к ошибке значения, которая, как я считаю, вызвана передачей диапазона вместо списка ячеек, разделенных запятыми:
env ❯ python test.py
A1 is 25.6198347107438
A1 is now #VALUE!
То, что ожидалось
Я ожидаю, что это вычислит A1 до 198.347 и выдаст следующий консольный журнал:
env ❯ python test.py
A1 is 25.6198347107438
A1 is now 198.3471074380165
Если я изменю формулу в ячейке A1 на = NPV (0.1, B1, C1 ) это действительно правильно оценивает
Среда
env ❯ pip freeze --local
decorator==4.4.1
et-xmlfile==1.0.1
jdcal==1.4.1
networkx==2.4
numpy==1.18.1
openpyxl==3.0.3
pycel==1.0b22
python-dateutil==2.8.1
ruamel.yaml==0.16.10
ruamel.yaml.clib==0.2.0
six==1.14.0
env ❯ python -V
Python 3.7.5
>>> import platform
>>> platform.platform()
Darwin-19.3.0-x86_64-i386-64bit'