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)
Esempio n. 2
0
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)