Code: Select all
def read_visible_data_from_sheet(sheet):
data = []
# Iterate through rows
for row in sheet.iter_rows():
row_num = row[0].row
# Check if the row is hidden or has height set to 0
row_hidden = sheet.row_dimensions[row_num].hidden
row_height = sheet.row_dimensions[row_num].height
row_level = sheet.row_dimensions[row_num].outlineLevel
if row_hidden or (row_height is not None and row_height == 0):
continue # Skip hidden rows
# Check if any parent row is collapsed
is_collapsed = False
for parent_row_num in range(1, row_num):
if sheet.row_dimensions[parent_row_num].outlineLevel < row_level and sheet.row_dimensions[parent_row_num].hidden == True:
is_collapsed = True
break
if is_collapsed:
continue # Skip collapsed rows
visible_row = []
# Iterate through columns in the row
for cell in row:
col_letter = cell.column_letter
col_dim = sheet.column_dimensions.get(col_letter)
if col_dim:
col_hidden = col_dim.hidden
col_width = col_dim.width
else:
continue
# Check if the column is hidden or has width set to 0
if col_hidden or (col_width is not None and col_width == 0):
continue # Skip hidden columns
visible_row.append(cell.value)
# Append the visible row to the data list
if visible_row: # Avoid adding empty rows
data.append(visible_row)
# Convert to a DataFrame
df = pd.DataFrame(data)
return df, sheet
Gibt es einen besseren Weg, mit solchen Fällen umzugehen? Ich bin offen dafür, bei Bedarf auch andere Bibliotheken zu erkunden.