簡體   English   中英

openpyxl 只讀取第一個單元格

[英]openpyxl only reads first cell

我收到了一個在另一台計算機上創建的 XLSX 文件,該文件無法使用pandas.read_excel(filename,engine='openpyxl',sheet_name=None)正確打開。 有一個警告Workbook contains no default style, apply openpyxl's default ,返回的對象是空數據框,只有第一列名稱被導入,每個工作表都有一個空索引。

然后我通過以下方式直接使用 openpyxl:

from openpyxl import load_workbook
wb = load_workbook(filename,read_only=True)
ws = wb['First Sheet']

for row in ws.rows:
  for cell in row:
    print(cell.value)
  # first_col_header

ws.calculate_dimension(force=True)
   # 'A1:A1'

print(ws['A1'].value)
   # first_col_header
print(ws['B1'].value)
   # second_col_header
print(ws['C1'].value)
   # third_col_header
print(ws['A2'].value)
   # first_val
print(ws['B2'].value)
   # sec_val
print(ws['C2'].value)
   # val_3

calculate_dimension()僅拉入第一個單元格,但我能夠從其他單元格獲取值。

我正在考慮手動迭代以查找維度,但訪問單元格似乎具有線性時序會很慢:

%%time
ws['A1'].value     # 5   ms
ws['A10'].value    # 50  ms
ws['A100'].value   # 250 ms
ws['A1000'].value  # 2.3 s
ws['A10000'].value # 22  s

我找到的唯一解決方法是,如果我打開文件並自己保存,pandas 可以導入它。 問題是我有很多文件,有些文件很大,無法通過每個 go 手動保存。

我可以做些什么來完成這項工作嗎?

過去,我們遇到過這種警告/行為,其中一些 Excel 生成了 Apache POI。 正如查理克拉克和你評論的那樣,這可以通過 openpyxl 的工作表 object 上的reset_dimensions()方法來解決。

關於我評論的這個Apache POI行為的更多信息可以在這里找到:

https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1584

暫無
暫無

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

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