如何使用Python获取过滤后的Excel数据的值?

问题描述 投票:0回答:1

在对某些列应用自动筛选后,我试图获取每个显示行中每个单元格的值。

示例代码:

import xlwings as xl
filename = “C:\somepath\Data.xlsx”

# Example of Excel data containing student info and grades
with xl.App(visible=True) as app:
    wb = xl.Book(filename)
    ws = wb.sheets.active

    # Excel sheet with 200 rows and 10 columns
    ws.api.Range(“A1”).CurrentRegion.AutoFilter(Field=1)
    # Apply custom filter to column E
    ws.api.Range(“E:E”).AutoFilter(Field=5, Criteria1=“A”)
    # Read back excel sheet with shown cells
    # Only shown cells from filter not hidden ones

我对如何做到这一点感到困惑。我将不胜感激任何帮助。

python-3.x xlwings
1个回答
0
投票

您可能需要使用该行的检查来查看它是否被隐藏

.api.EntireRow.Hidden

然后根据需要对该行或该行上的单元格执行任何操作(如果不是)。


所需的步骤可能是:

  1. 应用您的过滤器。
  2. 然后循环遍历任意列(我循环遍历 A 列,所以 A2、A3、A4 等)
  3. 检查单元格是否位于隐藏行,是否跳到下一行。如果不做该行需要做的事情

下面的示例代码仅打印该行中的所有单元格值(如果该行可见)。 (请注意,为了方便起见,此示例使用 xlsxwriter 实用程序将列号转换为字母,但在其他方面没有使用该模块来提取可见行)。

import xlwings as xl
import xlsxwriter

filename = "Data.xlsx"

# Example of Excel data containing student info and grades
with xl.App(visible=True) as app:
    wb = xl.Book(filename)
    ws = wb.sheets.active

    # Excel sheet with 200 rows and 10 columns
    ws.api.Range("A1").CurrentRegion.AutoFilter(Field=1)
    # Apply custom filter to column E
    ws.api.Range("E:E").AutoFilter(Field=5, Criteria1="Data")
    # Read back excel sheet with shown cells
    # Only shown cells from filter not hidden ones

    max_col_letter = xlsxwriter.utility.xl_col_to_name(ws["A1"].expand("right").last_cell.column-1)

    for cell in ws['A2'].expand("down"):
        if not cell.api.EntireRow.Hidden:  # For each cell in Column A to max row is this row hidden?
            print(cell.address)
            print(ws.range(f"{cell.address}:{cell.address.replace('A', max_col_letter)}").value, end='')
            print('\n-------------\n')
© www.soinside.com 2019 - 2024. All rights reserved.