Как отформатировать диапазон ячеек в Python, используя xlsxwriter - PullRequest
1 голос
/ 20 июня 2019

Как записать формат для диапазона ячеек.

То, что я делаю, - это циклический переход по именам столбцов в списке из оракула и форматирование столбцов как дат, где имя столбца начинается с «DT». Но я также хочу, чтобы весь диапазон данных имел границы.

Я хотел бы действительно применить формат даты к столбцам, а затем отдельно применить границы ... но последний формат применяет выигрыши, и применение границ перезаписывает форматирование даты в столбцах.

В идеале я хочу обработать диапазон данных границами, а затем применить форматы даты к столбцам даты, сохраняя границы.

Можете ли вы выбрать диапазон и затем применить форматирование или сделать пересечения диапазонов, как вы можете в VBA?

  # Generate EXCEL File
        xl_filename = "DQ_Valid_Status_Check.xlsx"

        workbook = xlsxwriter.Workbook(xl_filename)

        # Add a bold format to use to highlight cells.
        bold = workbook.add_format({'bold': True})

        date_format = workbook.add_format(
            {'num_format': 'dd-mmm-yyyy hh:mm:ss'})

        border = workbook.add_format()
        border.set_bottom()
        border.set_top()
        border.set_left()
        border.set_right()

        worksheet_info = workbook.add_worksheet()
        worksheet_info.name = "Information"
        worksheet_info.write('A1', 'Report Description:', bold)
        worksheet_info.write('B1', 'ARIEL Data Quality Report for Checking Authorisation Status of Marketing Applications')
        worksheet_info.write('A2', 'Report Date:', bold)
        worksheet_info.write('B2', datetime.datetime.now(), date_format)

        worksheet_data = workbook.add_worksheet()
        worksheet_data.name = "DQ Report"
        worksheet_data.write_row('A1', col_names)

        for i in range(len(results)):
            print("result " + str(i) + ' of' + str(len(results)))
            print(results[i])
            worksheet_data.write_row('A' + str(i + 2), results[i])
            #worksheet_data.set_row(i + 2, None, border)




        # add borders
        for i in range(len(results)):
            worksheet_data.set_row(i + 2, None, border)

        # format date columns
        for i in range(len(col_names)):
            col_name = col_names[i]
            if col_name.startswith("DT"):
                print(col_name)
                worksheet_data.set_column(i, i, None, date_format)

        workbook.close()

Ответы [ 2 ]

1 голос
/ 20 июня 2019

В соответствии с часто задаваемыми вопросами, в настоящее время невозможно форматировать диапазон ячеек одновременно , но будущая функция может это позволить.

Вы можете создавать объекты Format, содержащие несколько форматов.Свойства и применить свой собственный формат для каждой ячейки, как вы пишете в нее.См. «Создание и использование объекта формата» .

0 голосов
/ 24 июня 2019

Чтобы применить границы ко всем столбцам одновременно, вы можете сделать что-то вроде:

border = workbook.add_format({'border':2})
worksheet_info.set_column(first_col=0, last_col=10, cell_format=border)

А чтобы сохранить формат границы, вы можете изменить формат date_format на:

date_format = workbook.add_format(
        {'num_format': 'dd-mmm-yyyy hh:mm:ss',
         'border': 2})
...