def iterate_rows(wb: Book): """Iterates all rows in all workbook sheets, using first row as header. Yields: Each non-header row, as a dictionary of header key to value. """ for s in wb.sheets(): col_names = s.row(0) for row_nr in range(1, s.nrows): row = {} for name, col_nr in zip(col_names, range(s.ncols)): value = s.cell(row_nr, col_nr).value row[name.value] = value yield row