如何使用xlsxwriter在python中格式化一系列单元格

时间:2019-06-20 15:00:09

标签: python excel xlsxwriter

如何为一系列单元格编写格式。

我正在做的是从oracle中遍历列表中的列名,并将这些列格式化为日期,其中列名以“ 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 个答案:

答案 0 :(得分:1)

根据常见问题解答,当前无法format a range of cells at once,但是将来的功能可能允许这样做。

您可以创建包含多个格式属性的Format对象,并在写入每个单元格时将自定义格式应用于每个单元格。参见"Creating and using a Format Object"

答案 1 :(得分:0)

要将边框立即应用于所有列,您可以执行以下操作:

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})