Python openpyxl返回公式系列的空单元格值

Python openpyxl返回公式系列的空单元格值,python,openpyxl,Python,Openpyxl,重要信息:python 3.4.3 | openpyxl 2.2.3 | Excel 2013 大家都知道,您可以使用Excel的填充句柄快速设置列[1,2,3,4,5,6等]下的数字系列,这也适用于公式[=sum(B1,C1),=sum(B2,C2),=sum(B3,C3),等等]。但是,当我尝试使用openpyxl来nab公式时,这些单元格报告为空 它与我的原始代码不兼容,因此我创建了一个简单的脚本,其中包含以下内容: for row in ws.rows: for cell in ro

重要信息:python 3.4.3 | openpyxl 2.2.3 | Excel 2013

大家都知道,您可以使用Excel的填充句柄快速设置列[1,2,3,4,5,6等]下的数字系列,这也适用于公式[=sum(B1,C1),=sum(B2,C2),=sum(B3,C3),等等]。但是,当我尝试使用openpyxl来nab公式时,这些单元格报告为空

它与我的原始代码不兼容,因此我创建了一个简单的脚本,其中包含以下内容:

for row in ws.rows:
  for cell in row:
    print('my value is:',cell.value)
并在这个小(aww)Excel文件上运行它。我使用A1上的填充句柄用公式填充A2-A5。(为了清楚起见,我只是展示了公式,我在A列中实际看到的是结果。)

这是控制台中的输出:

my value is: =SUM(B1:C1)
my value is: 1
my value is: 2
my value is: =SUM(B2:C2)
my value is: 10
my value is: 20
my value is: =
my value is: 20
my value is: 25
my value is: =
my value is: 90
my value is: 42
my value is: =
my value is: 64
my value is: 4
openpyxl读取A1和A2中的公式,但不读取A3-A5中的公式。我在几个简单的数字系列上尝试了这个片段,openpyxl在读取这些单元格时没有遇到问题……问题似乎只是在于公式。我是否遗漏了一些明显的信息?

2016年3月23日更新 这个问题在最新版本的
openpyxl
中得到了解决(我相信是2.3及更高版本)


这是
openpyxl
()的一个已知缺点。简单的回答是,当您向下或横向拖动公式时,Excel会使用“共享公式”,而
openpyxl
无法解析该公式。如果你真的需要这个功能,你可以试试


编辑: 这一直困扰着我,所以这里有一个非常黑客的解决方法(在Python 2.7上测试)。首先,您必须获得Robin Macharg的Excel公式解析器。将其保存在Python路径中的某个位置,作为
xlparse.py
。现在,运行代码,您应该能够使用
get\u formula
函数获取任何单元格的公式。在大多数情况下,函数只返回
cell.value
,但每当函数遇到共享公式时,它都会给出正确的值

注意:
openpyxl.reader.worksheet.worksheet
的monkeypatch用于
openpyxl.load\u工作簿
使用我们的补丁类。在调用
load\u工作簿
之前,请确保运行此代码。如果您以不同的方式创建工作簿,则必须在适当的位置修补
工作表。

我遇到了相同的问题(只是初始值=),而不是整个公式。(虽然读取值是可以的)很酷的bean,我会尝试一下,看看我是否能让它与Python 3.4一起工作。我不知道这是否是我这边的问题(我对编程还是相当陌生)但是当sharedpyxl试图处理我在原始帖子中使用的示例Excel电子表格的单元格A3时,它返回了以下错误:openpyxl.utils.exceptions.CellCoordinationsException:当它在R1C1Converter类中点击这一行“col,row=openpyxl.utils.Coordination_from_string(addr)”时,单元格坐标无效(B2:C2)。哦,我明白了。我想问题出在
sharedpyxl
上,让我再尝试一下,然后发回。好吧——问题出在单元格的范围上。我已经更新了要点。再试一次,让我知道它是否有效我再次运行它时遇到了相同的错误,但在仔细检查Gist修订历史记录后,我仍然看到sharedpyxl的一个版本昨天更新(总共5个),即使在清除浏览器缓存之后。Oops实际上没有点击提交。现在试试
my value is: =SUM(B1:C1)
my value is: 1
my value is: 2
my value is: =SUM(B2:C2)
my value is: 10
my value is: 20
my value is: =
my value is: 20
my value is: 25
my value is: =
my value is: 90
my value is: 42
my value is: =
my value is: 64
my value is: 4