def adjust_rows_height(cls, df: pd.DataFrame, wb: Workbook, worksheet: Worksheet): bold_fmt = wb.add_format({'bold': True}) worksheet.set_row(0, cell_format=bold_fmt) for idx, row in df.iterrows(): height = max([1 + sum([1 for ch in str(c or '') if ch == '\n']) for c in row]) height = min(height, cls.MAX_ROW_HEIGHT) worksheet.set_row(idx + 1, height * worksheet.default_row_height)
def adjust_column_and_row_sizes(worksheet: Worksheet, rows: List[Tuple[str, ...]], num_columns: int) -> None: """ Rows height: - Title row is thicker than data row - blank separator row is thinner than data row Columns width: - Each column width is wider enough all the text in cells it contains :param worksheet: worksheet we operate on :param rows: list of tuples where each tuple represents a row in worksheet :param num_columns: number of columns in worksheet :return: """ num_rows = len(rows) # adjust row sizes column_max_sizes = [0] * num_columns worksheet.set_row(0, 30) for i in range(num_rows): if rows[i][0] != " ": worksheet.set_row(i + 1, 20) else: worksheet.set_row(i + 1, 10) for j in range(num_columns): column_max_sizes[j] = max(column_max_sizes[j], len(rows[i][j]) + 5) # adjust column sizes for j in range(num_columns): worksheet.set_column(j, j, column_max_sizes[j]) worksheet.set_column(num_columns, num_columns, 20)