我想在使用openpyxl編寫現有xlsx excel文件後讀取xlsx文件。有Python - openpyxl在使用公式在現有xlsx上編寫後讀取xlsx數據
我的Excel文件file1.xlsx
上A1
價值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()
會給出= A1 + A2
作爲輸出,而不是7
。
這主要是因爲Excel文件中的數據已更新但未保存。如果我想讓readFile()
輸出7
,我必須手動打開file1.xlsx
,保存並關閉它。
無論如何還是我濫用openpyxl上的讀/寫來解決此問題?我相信我沒有正確保存文件,或者我必須設法以編程方式打開,保存和關閉Excel文件。
嗨查理,爲了您的信息,我試圖使用data_only = True時提到的文檔提供。但是,在調用updateFile(5)之後,當使用wb = load_workbook('file1.xlsx',data_only = True)調用readFile()時,A3變爲「None」。正如在帖子中所說,這隻能在我實際打開Excel文件並關閉它時保存它之後才能修復。 –
這是預期的行爲:現有緩存被openpyxl無效。在編輯文件之前,結果可能會被緩存爲「7」。一旦將其保存在openpyxl中,就不會有緩存,因此在'data_only'模式下打開時,每次計算都會返回'None'。爲了避免這種情況,你必須在'data_only'模式下進行編輯,但是這個丟失了公式。否則,通過類似OpenOffice Calc的無頭版本的方式來管理文件,以重新計算緩存。 –
因此,我認爲使用'updateFile(5)'寫入數據後,我無法讀取'A3'上更新的單元格。由於在'data_only'模式下編輯會導致'A3'丟失公式,而'A3'中的數據也不會更新。 –