使用openpyxl更新和保存excel文件,然后读取它,不会为基于公式的列提供任何值



我正在尝试使用openpyxl更新excel工作表。当读取更新的基于公式的单元格时,我会得到None输出。即使我使用了openpyxl save命令,更新也不会被保存。

import openpyxl
# data_only=False   to upadate excel file
def write_cell(data_only):
wb_obj = openpyxl.load_workbook("mydata.xlsx", data_only=data_only)
sheet_obj = wb_obj["Sheet1"]
sheet_obj = wb_obj.active
sheet_obj.cell(row = 1, column = 1).value = 8
wb_obj.save(filename="mydata.xlsx")
# data_only=True   to read excel file"
def read_cell(data_only):
wb_obj = openpyxl.load_workbook("mydata.xlsx", data_only=data_only)
sheet = wb_obj["Sheet1"]
# Formula at column 2 : =A1*5
val = sheet.cell(row = 1, column = 2).value
return val

write_cell(False)
print(read_cell(True))

实际输出->无预期输出->40

有两种解决方案:

  1. 如果您参考文档,其中提到您可以拥有公式或公式中的值。如果使用公式修改文件,则必须通过Excel等某种应用程序将其传递,然后再次保存,这将更新公式的值。如果您尝试读取包含公式的单元格的值,那么现在将无法获得none作为输出。

  2. 另一种解决方案是打开excel文件,并在使用openpyxl:保存后从脚本中保存

from win32com.client import Dispatch
import openpyxl
def write_cell(data_only):
wb_obj = openpyxl.load_workbook("mydata.xlsx", data_only=data_only)
sheet_obj = wb_obj["Sheet1"]
sheet_obj = wb_obj.active
sheet_obj.cell(row = 1, column = 1).value = 8
wb_obj.save(filename="mydata.xlsx")
open_save("mydata.xlsx")
def open_save(filename):
"""Function to open and save the excel file"""
xlApp = Dispatch("Excel.Application")
xlApp.Visible = False
xlBook = xlApp.Workbooks.Open(filename)
xlBook.Save()
xlBook.Close()

相关内容

最新更新