有没有办法使用Python从XLSX文件中获取长公式的计算值

有没有办法使用Python从XLSX文件中获取长公式的计算值,python,pandas,openpyxl,xlsx,pycel,Python,Pandas,Openpyxl,Xlsx,Pycel,我正在尝试读取许多XLSX文件,我不关心函数,我只需要它返回的值。该文件未被修改,也不会被修改,因此获取这些单元格中的缓存值对我来说也很好 我已经阅读并尝试了许多有关StackOverflow的解决方案,但没有一个有效: 有人说熊猫会默认读取数值而不是公式 我已经试过了,但是我的数据框中所有带有公式的单元格都变成了nan from openpyxl import load_workbook wb = load_workbook(filename = f, data_only = True) f

我正在尝试读取许多XLSX文件,我不关心函数,我只需要它返回的值。该文件未被修改,也不会被修改,因此获取这些单元格中的缓存值对我来说也很好

我已经阅读并尝试了许多有关StackOverflow的解决方案,但没有一个有效:

  • 有人说熊猫会默认读取数值而不是公式
  • 我已经试过了,但是我的数据框中所有带有公式的单元格都变成了
    nan

    from openpyxl import load_workbook
    wb = load_workbook(filename = f, data_only = True)
    
    from openpyxl import load_workbook
    wb = load_workbook(filename = f, data_only = True)
    
  • 我尝试使用openpyxl:
  • 使用
    data\u only=True
    ,所有单元格也都是
    nan

    from openpyxl import load_workbook
    wb = load_workbook(filename = f, data_only = True)
    
    from openpyxl import load_workbook
    wb = load_workbook(filename = f, data_only = True)
    
    2.1。我还尝试了使用
    data\u only=False
    ,然后使用
    pycel

    这一个对我来说几乎足够好了,因为它可以计算简单的公式,比如
    =IFERROR(E98/E78,“-”
    ,但是有一些复杂的公式,比如
    =(SUM(AC38:AD38)/BH45)/(SUM(Q38:R38)/BD45)-1
    我得到了一个递归错误:

    RecursionError: maximum recursion depth exceeded in comparison
    Eval: vlookup(_C_("Key Metrics!C80"), _R_("YipitData Metrics (1P)!C8:AAT27"), match(_C_("Key Metrics!D7"), _R_("YipitData Metrics (1P)!C5:AAT5"), 0), 0) / vlookup("Implied JD Mall 1P GMV Net/Gross & Coverage Ratio", _R_("Historical Accuracy!B60:ADD70"), match(_C_("Key Metrics!D7"), _R_("Historical Accuracy!B58:ADD58"), 0), 0)
    
    此错误的完整日志非常长,但所有日志都是
    在处理上述异常期间,发生了另一个异常:
    然后是另一个
    递归错误

    2.2。再次尝试使用
    公式
    计算公式,但当我运行这行代码时:
    model=formulas.ExcelModel().load(文件名).finish()
    我得到了一个错误:

    Failed DISPATCHING 'CHAR' due to:
      NotImplementedError()
    
    日志要长得多,但我不能包括所有内容,因为StackOverflow说我的帖子看起来像垃圾邮件

  • 我也尝试了xlrd,但结果和熊猫一样,所有这些细胞都变成了nan

  • 通过
    openpyxl
    读取带有标志
    data_only=False
    的文件,然后使用
    pycel
    再次计算值是我现在的最佳选择,但这还不够,因为它无法读取我上面引用的这么长的公式。是否有任何更改或其他库可以修复我的问题?谢谢大家!

    请更具体一些。如果文件不打算更改,可能会将其导出到.csv并使用它?请更具体一些。如果文件不打算更改,可能会将其导出到.csv并使用它?