使用使用公式

时间:2017-05-18 07:48:02

标签: python excel openpyxl

我在Excel中有两列。第一个(列C)包含具有值的单元格,第二个(列B),我使用脚本从Excel公式中提取第一个值。

现在我想使用另一列中第二列的值,脚本没有任何错误,但是我给出了空单元格,因为第二列包含公式。

是否可以粘贴值或仅从第二列中提取值?

这是我的代码:

for i in range(0,len(listaunica)):
ws4.cell(row=i+1,column=3).value=listaunica[i]


for i in range(0,len(listaunica)):
    ws4.cell(row=i+1,column=2).value='=iferror(find(".",C{0}),C{0})'.format(i+1)

有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:1)

我不完全了解你的情况,所以我将解释一些可能性:

(1)您有一个使用Excel本身保存的Excel工作簿。在这种情况下,列B应该具有两个公式和这些公式的结果,因为Excel会计算它们。

(2)您有一个使用其他方法保存的Excel工作簿,例如由OpenPyXL编写,并且尚未(尚未)由Excel打开并保存。在这种情况下,您很可能 公式结果存储在B列中。

当您使用OpenPyXL阅读时,您必须选择是否需要公式或结果。这由data_only参数控制。如果您只想要结果,请将其设置为True。如果您的工作簿保存在Excel中,因此同时包含公式和结果,那么在OpenPyXL中读取它们的方法是打开工作簿两次,一次使用data_only=False,一次使用data_only=True。很麻烦,但这就是OpenPyXL的设计方式。

如果你有方案(2)的工作簿,而且列B看起来仍然有公式,那么很可能尝试使用data_only=True打开工作簿,只会为列B返回零。你不会能够从此工作簿中获取结果,直到您在Excel中打开它然后保存它。

答案 1 :(得分:0)

试试这个

for i in range(0,len(listaunica)):
ws4.cell(row=i+1,column=3).value=listaunica[i]
for i in range(0,len(listaunica)):
ws4.cell(row=i+1,column=2).value='=iferror(find(".",C{0}),C{0})'.format(i+1)
ws4.cell(row=i+1,column=2).value = ws4.cell(row=i+1,column=2).value

供参考documentation