Python 解析excel样式公式

Python 解析excel样式公式,python,Python,我正在使用python从电子表格xml构建公式参考图。公式就像 =IF(AND(LEN(R[-2]C[-1])>0,R[-1]C),WriteCurve(OFFSET(R16C6, 0,0,R9C7,R10C7),R15C6,R10C3, R8C3),"NONE") 我只对writecurve函数的第n个参数感兴趣。在这里,我提出了一个非常C风格的程序,它不在括号内。有很多嵌套公式 def parseArguments(t, func, n): start=t.find(func)+le

我正在使用python从电子表格xml构建公式参考图。公式就像

=IF(AND(LEN(R[-2]C[-1])>0,R[-1]C),WriteCurve(OFFSET(R16C6, 0,0,R9C7,R10C7),R15C6,R10C3, R8C3),"NONE")
我只对writecurve函数的第n个参数感兴趣。在这里,我提出了一个非常C风格的程序,它不在括号内。有很多嵌套公式

def parseArguments(t, func, n):
start=t.find(func)+len(func)+1
bracket = 0
ss = t[start:]
lastcomma = 0
for i, a in enumerate(ss):
    if a=="(":
        bracket +=1
    elif a==")":
        if bracket==0:
            break
        bracket-=1
    elif a == ",":
        if bracket==0 and n==0:
            break
        elif bracket ==0:
            if n-1==0:
                lastcomma = i
            n-=1
if lastcomma == 0:
    return ss[:i]
else:
    return ss[lastcomma+1:i]

有没有类似蟒蛇的方法?还是有更好的递归方法来解析整个公式?非常感谢

我所知道的最好的Excel公式解析器是。Robin Macharg的Python端口;我知道的最新版本是的一部分,但它可以独立使用-。解析您的公式没有问题:

from pycel.excelformula import ExcelFormula, FunctionNode
formula = ExcelFormula('=IF(AND(LEN(R[-2]C[-1])>0,R[-1]C),WriteCurve(OFFSET(R16C6, 0,0,R9C7,R10C7),R15C6,R10C3, R8C3),"NONE")')
>>> formula.ast
FunctionNode<IF>

openpyxl现在有一个标记器:访问在中工作的东西2020@Motin这只是基本的标记化,您仍然需要pycel将其分流到RPN和AST中。我将在那里查看当前的API。@Motin已更新为当前的pycel API。顺便说一句,感谢您指出需要更新!
write_curve = next(node for node, _ in formula.ast.descendants if isinstance(node, FunctionNode) and node.value.strip('(') == 'WriteCurve')
>>> write_curve.children[2].value
'R10C3'