簡體   English   中英

Openpyxl 獲取單元格值(對於有公式、無公式或日期時間的單元格)

[英]Openpyxl get cell value (for cells with formula, no formula, or datetime)

我有一個電子表格,其中的單元格包含沒有公式的文本、有公式的單元格以及格式為datetime的單元格。 我需要閱讀所有這三種情況的實際值。

將 Python 3 與 Openpyxl 3.0.3 一起使用。

目前,我有以下代碼。 使用data_only=True ,正如其他關於此類問題的 SO 帖子所建議的那樣。

workbook = load_workbook(r"path\to\my\spreadsheet.xlsx", data_only=True)
# select first available sheet
sheet = workbook.active
sheet.title

for value in sheet.iter_rows(min_row=2,
                             max_row=86,
                             min_col=1,
                             max_col=7,
                             values_only=True):
     print(value)

生成的 output 的片段如下所示。 在此示例中,第一列很好。 第三列是日期格式的,但我需要單元格的實際值(因此它們將是 26/1/2020 和 27/1/2020)。 第五和第六列有公式,但我需要實際值。

(2, None, datetime.datetime(2020, 1, 26, 0, 0), None, '=SUM(D$3:D4)', '=E4/E3', None)
(3, None, datetime.datetime(2020, 1, 27, 0, 0), None, '=SUM(D$3:D5)', '=E5/E4', None)

第三列是日期格式,但我需要單元格的實際值(因此它們將是 26/1/2020 和 27/1/2020)
至於格式化有strfomart
python 中日期時間模塊的選項

from datetime import datetime
value[2].strformat("%d/%m/%Y)


您能否首先驗證是否導入了值而不是公式,就像在這里完成的那樣

print(sheet["a1"].value)


編輯我創建了一個包含三列的 Excel 測試文件
在此處輸入圖像描述

奇怪的是,它在你的 for 循環中返回了正確的 output 。
output

 (1, 5, 6) (2, 7, 9) (3, 9, 12) (4, 11, 15)

我找到了以下評論(來源

FWIW,如 openpyxl.load_workbook() 中所述,打開具有 data_only=True 的工作簿時獲得的值是“上次 Excel 讀取工作表時存儲的值”。 這依賴於 .xls[x/m/...] 文件的緩存功能(我在除 Microsoft 之外的任何地方都可以找到有關該文件的文檔)。 – 用戶948581

也許嘗試打開文件檢查公式是否正確計算(顯示為單元格中的值),然后保存文件並確保它已關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM