Python 3.4:无法从Excel公式中读取值
我尝试使用Python3.4获取Excel文件的单元格C1的值。 单元格C1是一个公式:=A1+B1。 注:A1和B1值正在更改,因此C1中的返回值必须相应地自动更改 在Python 3.4中,我使用以下代码:Python 3.4:无法从Excel公式中读取值,python,excel,openpyxl,Python,Excel,Openpyxl,我尝试使用Python3.4获取Excel文件的单元格C1的值。 单元格C1是一个公式:=A1+B1。 注:A1和B1值正在更改,因此C1中的返回值必须相应地自动更改 在Python 3.4中,我使用以下代码: import openpyxl from openpyxl import Workbook wb = openpyxl.load_workbook('test.xlsx') sheet1 = wb['Sheet1'] C1Value = sheet1['C1'].value print
import openpyxl
from openpyxl import Workbook
wb = openpyxl.load_workbook('test.xlsx')
sheet1 = wb['Sheet1']
C1Value = sheet1['C1'].value
print('C1: ', C1Value)
======
运行python程序时,我获得:
C1:=A1+B1
我想得到的是:
A1=1,B1=2,然后
C1:3(代替C1:=A1+B1)
及
A1=10,B1=20,然后自动
C1:30(代替C1:=A1+B1)
如有任何帮助,我们将不胜感激。谢谢。快速浏览一下,您可能会发现
openpyxl从不计算公式
在进一步讨论之前,应该注意,可能的重复链接具有与其他模块相关的答案,这些通常是可接受的答案。使用这些模块,您不必实现自己的解析。对于更复杂的系统来说,这可能是挑战性的,也可能是几乎不可能的
若你们正在做一些非常简单的事情,那个么使用它并不是非常困难。用法:
请特别注意,所有内容都是字符串,因此计算公式最好使用
因此,如果您稍微编辑了代码(用#
标记的新的/更改的行)
其中,handle\u token()
取决于您想要它的复杂程度。关于C1:=A1+B1
和其他二进制运算符的两个简单且可能是hack-y示例:(这些运算符不适用于^
,因为python将其用于按位)
或者,如果您愿意(可以将其转换为单缸套,不推荐)使用发电机:
def handle_token(sheet, token):
parsed = str(sheet[t.value].value) if t.type is 'OPERAND' else t.value for t in token.items
formula = "".join(parsed)
return eval(formula)
它的可能副本通过使用:wb=openpyxl.load\u工作簿('test.xlsx',data\u only=True)像一个符咒一样工作
import openpyxl
from openpyxl import Workbook
from openpyxl.formula import Tokenizer #
wb = openpyxl.load_workbook('test.xlsx')
sheet1 = wb['Sheet1']
C1Formula = sheet1['C1'].value #
C1Token = Tokenizer(C1Formula) #
C1Value = handle_token(sheet1, C1Token) #
print('C1: ', C1Value)
def handle_token(sheet, token):
formula = ""
for t in token.items:
if t.type is 'OPERAND':
formula += str(sheet[t.value])
else:
formula += str(t.value)
return eval(formula)
def handle_token(sheet, token):
parsed = str(sheet[t.value].value) if t.type is 'OPERAND' else t.value for t in token.items
formula = "".join(parsed)
return eval(formula)