【问题标题】:How to save in openpyxl without losing formulae?如何在不丢失公式的情况下保存在 openpyxl 中?
【发布时间】:2015-12-22 17:47:53
【问题描述】:

因为我需要解析然后使用单元格中的实际数据,所以我在openpyxldata_only = True 中打开了一个xlsm。

事实证明这非常有用。但是现在,同样需要在单元格中包含公式的 xlsm,当我保存更改时,保存的版本中缺少公式。

data_only = True 和公式是否互斥?如果没有,如何在保存时访问单元格中的实际值而不会丢失公式?

当我说我丢失了公式时,似乎公式(总和、连接等)的 结果 得到了保留。但是,当单击单元格时,不再显示实际的公式本身。

更新:

为了确认公式是否被保留,我重新打开了保存的 xlsm,这次将 data_only 保留为 False。我检查了使用公式构建的单元格的value。如果保留了公式,打开 xlsm 并将 data_only 设置为 False 应该返回公式。但它返回实际的文本值(这不是我想要的)。

【问题讨论】:

  • Python:2.7.10。 Openpyxl:最新。
  • 在 Excel 中单击 显示公式 对保存的电子表格没有任何影响。

标签: python python-2.7 openpyxl


【解决方案1】:

您的部分问题是:data_only = True 和公式是否互斥?

在 openpyxl 中,答案是肯定的。

但这不是 Excel 所固有的。您可以拥有一个类似于 openpyxl 的库,它可以让您访问公式及其结果。这不太可能发生,因为 openpyxl 的维护者在哲学上反对这个想法。

因此,您在 openpyxl 中处理这种情况的方式是加载工作簿两次:一次使用 data_only=True 读取数据(保存在内存中),然后将其再次加载为“不同的”工作簿与data_only=False 以获得可写版本。

使用 Python 修改现有工作簿同时保留其他所有内容(包括格式、公式、图表、宏等)的“规范”方法是使用 COM 接口(例如 @987654321 @ 或更高级别的包装器(如 pywinautoxlwings)来控制正在运行的 Excel 实例。当然,这只有在安装了 Excel 的机器上运行时才有可能。

【讨论】:

    【解决方案2】:

    如果您想保持工作簿的完整性,即。保留公式,你不能使用data_only=True。文档说明了这一点。

    【讨论】:

    • 问题是:完整性确实似乎得到了维护,即单元格包含其原始公式的正确结果。只是单击单元格时不会显示形式本身。
    • 您必须选择:公式或计算得出的值。完整性是指无法保证这些值仍然正确,因为 openpyxl 本身从不计算公式。
    • 很公平,感谢您的额外澄清。继续使用这个很棒的库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 2022-01-26
    • 2020-12-02
    • 2019-06-08
    • 1970-01-01
    • 2012-03-06
    相关资源
    最近更新 更多