我在conda中完成了Pycel的pip安装。
我正在Jupyter Notebook中执行此操作。
%matplotlib inline
from pycel import ExcelCompiler
from IPython.display import FileLink
import matplotlib.pyplot as plt
filename = "../python/pycel_files/example.xlsx"
print("Loading {}...".format(filename))
# load & compile the file to a graph
excel = ExcelCompiler(filename=filename)
# test evaluation
print("B1 is {}".format(excel.evaluate('Sheet1!B1')))
print("B2=(B1+5) is {}".format(excel.evaluate('Sheet1!B2')))
输出:如预期
B1 is 10B2=(B1+5) is 15
但是,如果我现在这样做:
print("Setting B1 to 200")
excel.set_value('Sheet1!B1', 200)
print("B2 is now %s (the same should happen in Excel)" % excel.evaluate(
'Sheet1!B2'))
我在Jupyter中获得了预期的输出:
Setting B1 to 200
B2 is now 205 (the same should happen in Excel)
问题:
但是在excel中,单元格B1不会更新。即它不具有Pycel设置的值200。仍然显示10。
我在他们的示例github .ipynb of Pycel文件中遇到了相同的问题。有人可以确认他们是否也遇到相同的问题,并且看起来像个错误吗?
另外,如果我对其example excel file进行了任何更改并使用.ipynb文件,则在matplotlib图中也不会显示任何内容。 Pycel如何知道从哪张纸中选择?是否始终默认为sheet1?
最佳答案
因此,这里有一个关于Pycel的含义和作用的误解。从Pycel Readme:
Pycel是一个小型python库,可以将Excel电子表格转换为可执行的python代码,这些代码可以独立于Excel运行。 python代码基于图形,并使用缓存和延迟评估来确保(相对)快速执行。
因此,回答您的问题:
但是在excel中,单元格B1不会更新。
Pycel不会更改Excel文件。它从excel文件中读取并从所需的单元格创建一个“已编译”电子表格。
如果我对其示例excel文件进行了任何更改并使用其.ipynb文件,则matplotlib图形中将不会显示任何内容。
您可能需要重新编译excel电子表格,以使所有结果显示在Python代码中。
Pycel如何知道从哪张纸中选择?是否始终默认为sheet1?
Pycel确实处理床单。它适用于细胞。这些单元格可以来自工作簿中的任何工作表。