在对某些列应用自动筛选后,我试图获取每个显示行中每个单元格的值。
示例代码:
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
我对如何做到这一点感到困惑。我将不胜感激任何帮助。
您可能需要使用该行的检查来查看它是否被隐藏
.api.EntireRow.Hidden
然后根据需要对该行或该行上的单元格执行任何操作(如果不是)。
所需的步骤可能是:
下面的示例代码仅打印该行中的所有单元格值(如果该行可见)。 (请注意,为了方便起见,此示例使用 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')