openpyxl 2.4.2:公式生成的单元格值在保存后为空

5

我使用openpyxl打开文件,编辑一些单元格并保存更改。以下是示例:

  import openpyxl
  book = openpyxl.load_workbook(sheet_path)    
  sheet = book.active

  for row in range(sheet.max_row):
      index = row + 1
      sheet.cell(row=index, column=1).value = "something"

  book.save(sheet_path)

问题是,当我保存文件时,其他单元格也被修改了。实际上,我的工作表中包含公式的单元格已经“损坏”,文件大小大大缩小,当我使用其他脚本读取工作表时,包含公式的单元格报告为空。但是当我打开工作表时,一切看起来都很正常,当我保存时,一切都得到修复,文件大小恢复正常。我认为问题出在openpyxl没有在保存时“计算”公式。这将减小文件大小,并需要手动打开/保存才能获取真实的单元格值。我找不到任何解决这个问题的方法,除非完全更改我使用的库。 感谢您的帮助!

你可以拥有公式或最近计算出的值,但从来不会同时拥有两者。 - Charlie Clark
请解释:“包含公式的单元格报告为空”。这不可能是真的,因为在打开文件时会重新计算公式。 - stovfl
运行脚本后,我使用一个JavaScript脚本来读取单元格。我认为这个脚本将单元格视为空,因为该表格是由脚本打开的。据我了解,Excel在打开时会重新计算公式,但是脚本无法看到这些值,因为需要保存表格才能真正保留这些值。 - Léandre Arseneault
1个回答

2

当openpyxl读取和写入现有的公式时,计算出的值会被省略,并且对于新的公式不会计算任何值。 openpyxl在工作簿中设置一个标志,告诉Excel在加载时重新计算公式值,这就是为什么使用Excel查看时一切看起来正常的原因。


这是一个好想法,感谢清晰的回答。你知道重新计算公式的方法吗,除了手动打开和保存工作表之外? - Léandre Arseneault
如果您正在Windows上运行并已安装Excel,则可以使用COM自动化来打开和保存工作簿。一个包含您需要的所有部分的问答是https://dev59.com/e4Hba4cB1Zd3GeqPVsZx - 一定要阅读答案,因为问题的代码接近但不完全正确。 - cco
非常感谢!这正是我所需要的。你刚刚为我节省了大量时间 :) - Léandre Arseneault

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接