如何在不丢失公式的情况下保存在openpyxl中?

时间:2015-09-25 00:21:24

标签: python python-2.7 openpyxl

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

事实证明这非常有用。现在,对于在单元格中包含formuale的xlsm具有相同的需求,当我保存更改时,保存的版本中缺少公式。

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

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

更新

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

2 个答案:

答案 0 :(得分:3)

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

在openpyxl中,答案是肯定的。

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

那么,你应该如何在openpyxl中处理你的情况是加载工作簿两次:只用data_only=True一次来读取数据(你保存在内存中),然后再加载它一个“不同”的工作簿,data_only=False可以获得可写版本。

使用Python修改现有工作簿,同时保留所有 else(包括格式,公式,图表,宏等)的“规范”方法是使用COM接口(例如{{ 3}}或更高级别的包装器(如PyWin32pywinauto)来控制正在运行的Excel实例。当然,只有在安装了Excel的计算机上运行时才能实现。

答案 1 :(得分:2)

如果要保留工作簿的完整性,即。保留公式,你不能使用data_only=True。文档非常清楚。