簡體   English   中英

如何使用 OpenPyXL 遍歷 Excel 表中的所有行?

[英]How to iterate over all rows in an Excel Table using OpenPyXL?

Excel 表的 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.

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