【问题标题】:How to set formatting for entire row or column in xlsxwriter Python?如何在 xlsxwriter Python 中为整行或整列设置格式?
【发布时间】:2021-07-21 20:12:33
【问题描述】:
workbook = xlsxwriter.Workbook('demo1.xlsx')
worksheet = workbook.add_worksheet()
format = workbook.add_format({ 'bg_color': '#5081BB','font_color': '#FFFFFF','font_size': 12,'text_wrap':'true'})
textWrap = workbook.add_format({'text_wrap':'true'})
col = 0
row = 0
for i in data["tabledata"]:
    for j in i:
        worksheet.write(row, col, j,textWrap)
        col = col+1
    row = row+1
    col = 0
worksheet.set_row(0, 20, format)
worksheet.set_row(1, 20, format)
workbook.close()

这样不行,那set_row和set_column有什么用呢?
如何应用特定行/列的格式?我也需要申请 日期列的日期格式。

worksheet.set_column(7, none, Dateformat)

【问题讨论】:

    标签: python export-to-excel xlsxwriter


    【解决方案1】:

    XlsxWriter 中的格式设置与 Excel 中一样:单元格格式会覆盖行格式,而行格式又会覆盖列格式。

    因此,如果您希望单元格具有格式以及与行或列相同的格式,则必须定义一个包含您想要的所有格式的格式对象。

    【讨论】:

    • 我使用 "worksheet.set_row(0, 20, format)" 它不起作用。这是为整行设置格式的方法吗?通常我习惯于为每个单元格而不是每个单元格设置格式如何为整行添加格式?
    • 从代码看来,set_row() 格式正在被对write() 的单独调用覆盖,正如我上面在 Excel 中所说,单元格格式优先于行格式。如果您想要一种结合了行格式和单元格格式的格式,那么您需要创建一个具有两者属性的新格式。
    • “喜欢在 Excel 中”是什么意思?在 Excel 中,我可以将 B 列格式化为 %,将第 2 行格式化为粗体;然后单元格 B2 将加粗并以 % 表示。如果我尝试使用 xlsxwriter 进行相同操作,则单元格 B2 将是粗体,但不是 %,并且 B 列中的所有其他单元格将是 %。有什么办法可以得到和 Excel 一样的结果吗?
    • 在您描述的情况下,Excel 创建了第三种格式,它是行格式和列格式的组合,并将其应用于单元格。用户可以在 XlsxWriter 中执行相同的操作。但是,它不会自动发生。
    【解决方案2】:

    要扩展 jmcnamara 的答案,创建格式的深层副本然后对其进行修改是不够的。

    import xlsxwriter
    import copy
    
    wb = xlsxwriter.Workbook('test.xlsx')
    default = wb.add_format({'bg_color': 'yellow'})
    
    ws = wb.add_worksheet()
    ws.set_row(0, None, default)
    
    ws.write_string(0, 0, 'default format')
    
    fmt = copy.deepcopy(default)
    fmt.set_bold()
    ws.write_string(0, 1, 'bolded and yellow', fmt)
    
    wb.close()
    

    上面的代码产生以下内容:

    看来您必须使用Workbook.add_format 方法方法来创建新格式。替换

    fmt = copy.deepcopy(default)
    fmt.set_bold()
    

    与

    fmt = wb.add_format({'bg_color': 'yellow', 'bold': True})
    

    确实有效:

    【讨论】:

      【解决方案3】:

      我的代码:

      workbook = xlsxwriter.Workbook('demo1.xlsx')
      worksheet = workbook.add_worksheet()
      format = workbook.add_format({ 'bg_color': '#5081BB','font_color': 
      '#FFFFFF','font_size': 12,'text_wrap':'true'})
      textWrap = workbook.add_format({'text_wrap':'true'})
      
      worksheet.set_column('B:B', 18, format)       //format formatting apply to entire B column
      worksheet.set_column('C:C', None, textWrap)   //textWrap formatting apply to entire C column
      

      【讨论】:

      • 如果我需要将格式应用于列中的特定行数,例如从 A5:A100 ,然后如何实现这一点
      【解决方案4】:

      wrt Seema 的问题我已经使用 (un)conditional_formatting 实现了这一点,它接受单元格范围作为参数,并且无论单元格中的值是什么,它都将始终应用 number_format 并覆盖列和行格式:

      ``worksheet0.conditional_format('J3:V22', {
          'type': 'cell',
          'criteria': '<',
          'value': 0, 'format': number_format
              }
          )
      
      worksheet0.conditional_format('J3:V22', {
          'type': 'cell',
          'criteria': '>=',
          'value': 0, 'format': number_format
          }
      )``
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-15
        • 1970-01-01
        • 2021-06-20
        • 1970-01-01
        • 2013-03-18
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        相关资源
        最近更新 更多