【问题标题】:How to format a range of cells in python using xlsxwriter如何使用 xlsxwriter 在 python 中格式化一系列单元格
【发布时间】:2019-06-20 15:00:09
【问题描述】:

如何将格式写入一系列单元格。

我正在做的是循环遍历 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()

【问题讨论】:

    标签: python excel xlsxwriter


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我正在遍历行并写入每一行而不是单个单元格。迭代 Oracle 数据集。
    • FAQ中提到的“未来功能”在项目的GitHub页面上正式注册为issue #111。不幸的是,该问题已关闭,我们不能指望在 XlsxWriter 项目中就此类功能进行任何工作。但是,在那次讨论中提出了几种替代方案,并且可能还会在 GitHub 或 PyPI 上发布相关的帮助程序包。
    【解决方案2】:

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

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

    【讨论】:

    • 我想为所有内容应用边框,但在对整个数据范围应用边框后,对列进行日期格式分层。在 VBA 中,我将创建数据范围和列的范围交集并格式化该范围。但是您可以对格式进行分层...不是最后一种格式在 xlsxWriter 中获胜吗?
    • 最后一个获胜,但您可以拥有一个同时具有日期格式和边框的格式变量。您不需要在每个格式实例中只应用一件事。
    • 但问题是我只想要数据末尾的边框。我尝试创建带有边框和日期格式的格式并将其应用于列,但边框一直向下...选择一个范围而不是循环遍历每个单元格会很棒。
    • 你可以有类似的东西: workbook.add_format( { 'num_format': 'dd-mmm-yyyy hh:mm:ss', 'border': 2, 'font_size': 15, 'bold ': True, 'bg_color': 'red' }) 所有这些一起工作
    • 等等。您想要数据周围有一个正方形,或者最后是一条线?不在每个单元格中?
    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 2017-02-15
    • 2017-02-16
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多