【问题标题】:Xlsxwriter different formats to different cells in same columnXlsxwriter 不同格式到同一列中的不同单元格
【发布时间】:2016-10-16 13:10:13
【问题描述】:

我在为不同的单元格设置格式时遇到问题。我有两个数据框,其中包含应该以不同格式显示的数字。我创建了一个简单的示例来说明我的问题。

import pandas as pd
import numpy as np
import xlsxwriter

frame1 = pd.DataFrame(np.random.randint(0,100,size=(10, 4)),  columns=list('ABCD'))

#want to show this frame as percentage in Excel later
frame2 = pd.DataFrame(np.random.randint(0,100,size=(10, 4)),    columns=list('EFGH'))

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')

frame1.to_excel(writer, sheet_name='Sheet1', startcol= 0, startrow= 0)

frame2.to_excel(writer, sheet_name='Sheet1', startcol= 0, startrow = (2 + len(frame1)))

writer.save()

此代码生成此 Excel 表:

现在的问题是,例如,我可能希望将标记为黄色的单元格设置为 % 或其他格式。我知道我可以为整列或整行设置格式,但我无法解决如何为某些特定单元格设置格式。我想有一些非常简单的解决方案。

【问题讨论】:

    标签: python excel pandas xlsxwriter


    【解决方案1】:

    解决方法是使用conditional_format,正如@jmcnamara 所述,您只需应用{'type': 'top','value': str(f2rows),'format': format1},其中f2rows 是您的数据框的行数,format1 是您想要的格式申请。

    import pandas as pd
    import numpy as np
    import xlsxwriter
    
    frame1 = pd.DataFrame(np.random.randint(0,100,size=(10, 4)),  columns=list('ABCD'))
    
    #want to show this frame as percentage in Excel later
    frame2 = pd.DataFrame(np.random.randint(0,100,size=(10, 4)),    columns=list('EFGH'))
    
    writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
    
    frame1.to_excel(writer, sheet_name='Sheet1', startcol= 0, startrow= 0)
    
    frame2.to_excel(writer, sheet_name='Sheet1', startcol= 0, startrow = (2 + len(frame1)))
    
    # Get the xlsxwriter workbook and worksheet objects.
    workbook  = writer.book
    worksheet = writer.sheets['Sheet1']
    
    f2rows = frame2.shape[0]
    startR = 4 + len(frame1)
    endR = startR + f2rows -1
    
    # Apply a conditional format to the cell range.
    format1 = workbook.add_format({'bg_color': '#FFFF00',
                                   'font_color': '#9C0006'})
    
    worksheet.conditional_format('C{}:C{}'.format(startR, endR), {'type': 'top',
                                               'value': str(f2rows),
                                               'format': format1})
    
    worksheet.conditional_format('E{}:E{}'.format(startR, endR), {'type': 'top',
                                               'value': str(f2rows),
                                               'format': format1})
    
    writer.save()
    

    【讨论】:

      【解决方案2】:

      Excel 中的列格式适用于整列,只能被行格式或单元格格式覆盖。

      因此,您需要将单元格格式应用于您想要以不同方式格式化的单元格,而这在 Pandas 界面中是不可能的。

      另一种方法是对您感兴趣的单元格范围使用条件格式。例如,请参阅 XlsxWriter 文档中的 this Pandas program

      【讨论】:

      • 感谢帮助,我很惊讶没有更简单的解决方案,但使用 conditional_format 可以。
      猜你喜欢
      • 2011-05-12
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多