Python - openpyxl读取在已有的xlsx上用公式写过的数据

2024-09-30 22:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在使用openpyxl在现有xlsx excel文件上写入后读取xlsx文件。在

我的Excel文件file1.xlsxA1上有1,在A2上有2,在A3上有值A1 + A2,此时是3。在

def updateFile(a):
    wb = load_workbook('file1.xlsx')
    ws = wb.active
    #Update specific column
    ws['A1'] = a
    wb.save('file1.xlsx')

def readFile():
    wb = load_workbook('file1.xlsx')
    sheet = wb['Sheet1']
    print(sheet['A3'].value)

我的程序将在file1.xlsx上更新A1,并读取A3上的数据。例如,调用updateFile(5)会将A1更新为5,并可能在A3上给我7。在

不幸的是,在调用updateFile(5)之后,readFile()将给出{}作为输出,而不是{}。在

这主要是因为Excel文件中的数据更新了,但没有保存。如果我想让readFile()输出{},我必须手动打开file1.xlsx,保存它,然后关闭它。在

有没有用openpyxl的读/写来解决这个问题?我认为我没有正确地保存文件,或者我必须想出一种方法来以编程方式打开、保存、关闭Excel文件。在


Tags: 文件a2wsdefa1loadxlsxexcel
3条回答

你看到的是预期行为。当单元格有公式时,Excel会将公式的结果保存为缓存值。openpyxl从不计算公式,因此从不维护缓存并使任何现有缓存失效。相反,如果需要公式的结果,则可以使用data_only=True参数加载文件。但这将用值替换公式。在

文档中包含了这一点:http://openpyxl.readthedocs.org/en/stable/usage.html#read-an-existing-workbook

我也有同样的问题。我的方法如下:

print('Reopen all files and save again')
for eachFile in glob.glob(path + fileCriteria)[:]:
    xl = DispatchEx('Excel.Application')
    xl.Visible = False
    wb = xl.Workbooks.Open(eachFile)
    wb.Close(True)

对于任何可能遇到这种情况的人,如果您不介意从BitBucket源代码安装openpyxl,这里有一个(beta!)此处修复: https://bitbucket.org/cliffckerr/openpyxl/src/default/

相关问题 更多 >