【问题标题】:Python excel integration, #VALUE errorPython excel 集成,#VALUE 错误
【发布时间】:2012-11-08 19:52:36
【问题描述】:

我有一个集成了 python 和 Excel 的工作程序(感谢 xlwt)。我正在读取 csv 文件并复制到 excel 中。在执行此操作时,我还使用 xlwt 中的公式模块包含了一些公式。具体来说,代码是

ws_xlwt.write(3,3, Formula("MMULT(MINVERSE(C11:D12),"+col_char+"2:"+col_char+"3)"), style)

col_char 是循环中生成的 ASCII 码。数组 (C11:D12) 包含使用代码生成的数据:

ws_xlwt.write(10,2, Formula("SUMPRODUCT($C$36:$C$161,$C$36:$C$161)"), style)

当程序运行时,它会将公式正确地放入特定的单元格中。但单元格显示错误“#VALUE”而不是结果。有趣的一点是,当我打开 excel 文件时,双击这个特定的单元格进行编辑,然后在不更改任何内容的情况下按 Enter 键,结果就会显示出来。我不确定这是 python 集成问题还是 Excel 问题。

OS - Windows 7 64-bit
Python - 2.7 32-bit

【问题讨论】:

    标签: python excel xlwt


    【解决方案1】:

    我最好的猜测是,这是由于对公式的评估。我不相信 xlwt 会在插入公式时对其进行评估,这意味着您会收到值错误,因为在评估 MMULT 函数时,SUMPRODUCT 的结果不存在。当您双击并按 Enter 时它起作用的原因是 Excel 现在正在重新计算所有内容,从而为您提供有效的结果。

    【讨论】:

    • 我也是这么想的。所以,我在 sumproduct 和 mmult 之间包含了 wb_xlwt.save(os.path.splitext(file_name)[0] +".xls") .. ws_xlwt.write(10,2, Formula("SUMPRODUCT("+col_char+ "36:"+col_char+"161,$O$36:$O$161)"), 风格) wb_xlwt.save(os.path.splitext(file_name)[0] +".xls") ws_xlwt.write(3,3 , Formula("MMULT(MINVERSE(C11:D12),"+col_char+"2:"+col_char+"3)"), style) 这应该有效地保存工作表和书,然后再次写入(我认为)因此消除错误。它仍然没有解决问题。所以,简而言之,它现在读作..
    • @groovyrv 我不认为保存它可以解决问题 - 您需要在编写原始公式后打开它以强制 Excel 计算它(需要使用 Excel,因为 @987654325 @ 本身不做任何计算)。
    • @groovyrv 做了更多研究,看来您需要打开/关闭 Excel 才能使其工作。请参阅此帖子 (stackoverflow.com/questions/4198365/…),作者指出这是问题所在。您将需要将脚本拆分为多个部分,并根据需要打开 Excel;或以编程方式打开/关闭它。
    • 再次感谢您的帮助。通过将公式直接放入单元格中,我现在已经能够使用 openpyxl 使其工作。虽然我确实发现我现在有一个稍微大一点的问题(数组公式),任何免费的 Excel 阅读器都不支持。也许这个问题是另一个线程。再次感谢。
    • @groovyrv 是的,在计算方面我绝对不会低估 Python。在某些情况下(例如 COUNTIF 在 100K 行的范围内),Excel 将需要几分钟(如果它不崩溃),而 Python 可以在几秒钟内完成相同的操作。另外,如果您只关心结果数据而不需要基础公式,您将在 Excel 端以工作簿的形式提高效率,而不是在每次更改某些内容时自动计算您添加的公式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2017-11-21
    相关资源
    最近更新 更多