我的程序应该使用工作表中的每个单元格并带有公式,然后“分解”它。这意味着它将解析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))'