Python Openpyxl Parse函数无法正确识别RANGE

时间:2018-08-23 04:41:45

标签: python openpyxl

我的程序应该使用工作表中的每个单元格并带有公式,然后“分解”它。这意味着它将解析excel公式,并用括号括起来的该单元格的值替换每个单元格引用(每个RANGE,即A22)。因此,如果excel单元格A22=A3*A5和单元格B10值是 =A22+10,则B10变为= (A3*A5)+10。然后,程序将不断循环并替换单元格值,直到它们只是原始数字和函数为止。

这很好,直到程序到达我正在处理的Excel文件C34中的特定单元格为止。

C34=IF(B1_Data,IF(B1_Suf,IF(B1_05,BD34,""),IF(AND(B2_Data,B1B2_Suf),IF(B1_05,BD34,""),BD30)),BD29)

第一次和第二次迭代进展顺利...

'C34_lvl0': 'IF($BA$29,IF($BA$31,IF($BA$33,BD34,""),IF(AND($BA$30,$BA$32),IF($BA$33,BD34,""),BD30)),BD29)'

'C34_lvl1': 
'=IF((NOT(OR(I29="",I30="",I31="",I31=10.0001,I32=""))),IF((AH32<0),IF((AND(#REF!>0,#REF!<0.5)),(LD-ddTaq MASS TOO SMALL - INCREASE BUILD SIZE),""),IF(AND((NOT(OR(I36="",I37="",I38="",I38=10.0001,I39=""))),(AH39<0)),IF((AND(#REF!>0,#REF!<0.5)),(LD-ddTaq MASS TOO SMALL - INCREASE BUILD SIZE),""),(INSUFFICIENT LD-ddTaq TO SUPPORT BUILD, USE 2ND BATCH))),(ENTER ACTUAL LD-ddTaq POLYMERASE VALUES FOR LOT #1))

但是随后在下一次迭代中出现以下错误。当我解析上述(lvl1)公式时,我看到它显示(NOT(OR(I29="",I30="",I31="",I31=10.0001,I32="")))单个范围。在其他excel IF函数中不会发生

任何人都知道发生了什么事或正在解决吗?这是错误吗?我正在使用openpyxl版本 2.4.9 和python 3.6.4

错误:

Traceback (most recent call last):
  File "C:\Python\20180818HW_ValidationAid_v016.py", line 186, in <module>
    tok=Tokenizer(tFinal) #dissect each cell, do the spiel
  File "C:\Python\lib\site-packages\openpyxl\formula\tokenizer.py", line 53, in __init__
    self._parse()
  File "C:\Python\lib\site-packages\openpyxl\formula\tokenizer.py", line 86, in _parse
    self.offset += dispatcher[curr_char]()
  File "C:\Python\lib\site-packages\openpyxl\formula\tokenizer.py", line 157, in _parse_error
    (self.offset, self.formula))
openpyxl.formula.tokenizer.TokenizerError: Invalid error code at position 402 in '=IF((NOT(OR(I29="",I30="",I31="",I31=10.0001,I32=""))),IF((AH32<0),IF((AND(#REF!>0,#REF!<0.5)),(LD-ddTaq MASS TOO SMALL - INCREASE BUILD SIZE),""),IF(AND((NOT(OR(I36="",I37="",I38="",I38=10.0001,I39=""))),(AH39<0)),IF((AND(#REF!>0,#REF!<0.5)),(LD-ddTaq MASS TOO SMALL - INCREASE BUILD SIZE),""),(INSUFFICIENT LD-ddTaq TO SUPPORT BUILD, USE 2ND BATCH))),(ENTER ACTUAL LD-ddTaq POLYMERASE VALUES FOR LOT #1))'

0 个答案:

没有答案