Python xlwt:sum函数最大参数限制?

时间:2017-04-24 12:38:18

标签: python excel xlwt

使用xlwt库生成excel文件时遇到此错误:

  File "/usr/local/lib/python2.7/dist-packages/xlwt/ExcelFormula.py", line 17, in __init__
    self.__parser.formula()
  File "/usr/local/lib/python2.7/dist-packages/xlwt/ExcelFormulaParser.py", line 81, in formula
    self.expr("V")
  File "/usr/local/lib/python2.7/dist-packages/xlwt/ExcelFormulaParser.py", line 88, in expr
    self.prec0_expr(arg_type)
  File "/usr/local/lib/python2.7/dist-packages/xlwt/ExcelFormulaParser.py", line 133, in prec0_expr
    self.prec1_expr(arg_type)
  File "/usr/local/lib/python2.7/dist-packages/xlwt/ExcelFormulaParser.py", line 151, in prec1_expr
    self.prec2_expr(arg_type)
  File "/usr/local/lib/python2.7/dist-packages/xlwt/ExcelFormulaParser.py", line 181, in prec2_expr
    self.prec3_expr(arg_type)
  File "/usr/local/lib/python2.7/dist-packages/xlwt/ExcelFormulaParser.py", line 210, in prec3_expr
    self.prec4_expr(arg_type)
  File "/usr/local/lib/python2.7/dist-packages/xlwt/ExcelFormulaParser.py", line 228, in prec4_expr
    self.prec5_expr(arg_type)
  File "/usr/local/lib/python2.7/dist-packages/xlwt/ExcelFormulaParser.py", line 251, in prec5_expr
    self.primary(arg_type)
  File "/usr/local/lib/python2.7/dist-packages/xlwt/ExcelFormulaParser.py", line 517, in primary
    raise Exception("%d parameters for function: %s" % (arg_count, func_tok.text))
Exception: 185 parameters for function: sum

xlwt上挖掘源代码,我可以看到sum函数有最多30个参数的硬限制。我想知道为什么会有这样的限制?如果它会有更大的影响吗?

我的xlwt excel文件生成的实现使用sum和大量数据,它可以使用比30更多的参数(因为它总结了文件的许多子部分)。

限制在此处设置:

xlwt/ExcelMagic.py

all_funcs_by_name = {
    # Includes Analysis ToolPak aka ATP aka add-in aka xcall functions,
    # distinguished by -ve opcode.
    # name: (opcode, min # args, max # args, func return type, func arg types)
    # + in func arg types means more of the same.
...
'SUM'         : (  4, 1, 30, 'V', 'D+'),
...
}

第三个数字(30)表示函数sum的最大参数。

有没有人知道是否有某种解决方法所以如果需要我可以使用任意数量的参数,或者由于某种原因它不合适?

P.S。在使用excel函数时,我可以直接在calcsum上使用任意数量的参数(至少没有达到该限制,如果有的话,通过测试)

1 个答案:

答案 0 :(得分:1)

xlwt仅仅强制执行.xls文件中SUM函数的 Excel 参数限制。实际上,这是任何Excel函数的绝对最大值,而不仅仅是SUM。如果xlwt允许超过30,则根据Excel本身生成的工作簿将无效。

显示了一些解决方法herehere

请注意,30参数限制适用于旧版本的Excel。使用more recent version将限制增加到255.要生成更新的Excel工作簿,请使用XlsxWriter而不是xlwt。请参阅this table比较Excel 2003(.xls)与2010(.xlsx)的限制。