[英]How to iterate over all rows in an Excel Table using OpenPyXL?
我想出了以下 function 來做到這一點。
from typing import Any, Dict, Generator
from openpyxl.worksheet.table import Table
from openpyxl.utils import rows_from_range
TableRow = Dict[str, Any]
def iter_table_rows(tb:Table) -> Generator[TableRow, None, None]:
"""Iterate over rows from a table with headers (row as dictionary)"""
def get_row_values(row_cell_ref):
return [ws[c].value for c in row_cell_ref]
iter_rows = rows_from_range(tb.ref)
headers = get_row_values(next(iter_rows))
for row_cells in iter_rows:
yield {h:v for h,v in zip(headers, get_row_values(row_cells))}
tb = ws.tables["MyTable"]
for row in iter_table_rows(tb):
print(row)
感謝您提供 function。 我添加了一個 ws 參數,因為 ws 不是全局變量,並且它是 get_row_values 所必需的。
def iter_table_rows(ws:Worksheet, tb:Table) -> Generator[TableRow, None, None]:
"""Iterate over rows from a table with headers (row as dictionary)"""
def get_row_values(ws:Worksheet,row_cell_ref:tuple):
return [ws[c].value for c in row_cell_ref]
iter_rows = rows_from_range(tb.ref)
headers = get_row_values(ws,next(iter_rows))
for row_cells in iter_rows:
yield {h:v for h,v in zip(headers, get_row_values(ws,row_cells))}
我暫時還沒有看到其他方法來做到這一點。
並且沒有“父”屬性可以知道哪個工作表是表格。
問候,O。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.