代码之家  ›  专栏  ›  技术社区  ›  Clay

使用xlsxwriter将pandas数据框写入excel并包含“write-rich”字符串格式

  •  6
  • Clay  · 技术社区  · 7 年前

    以下是可复制的,并产生所需的输出。

    import xlsxwriter, pandas as pd
    
    workbook = xlsxwriter.Workbook('pandas_with_rich_strings.xlsx')
    worksheet = workbook.add_worksheet()
    
    # Set up some formats to use.
    bold = workbook.add_format({'bold': True})
    italic = workbook.add_format({'italic': True})
    red = workbook.add_format({'color': 'red'})
    
    df = pd.DataFrame({
        'numCol': [1, 50, 327],
        'plainText': ['plain', 'text', 'column'],
        'richText': [
            ['This is ', bold, 'bold'],
            ['This is ', italic, 'italic'],
            ['This is ', red, 'red']
        ]
    }) 
    
    
    headRows = 1
    
    
    for colNum in range(len(df.columns)):
        xlColCont = df[df.columns[colNum]].tolist()
        worksheet.write_string(0, colNum , str(df.columns[colNum]), bold)
        for rowNum in range(len(xlColCont)):
            if df.columns[colNum] == 'numCol': 
                worksheet.write_number(rowNum+headRows, colNum , xlColCont[rowNum])        
            elif df.columns[colNum] == 'richText':
                worksheet.write_rich_string(rowNum+headRows, colNum , *xlColCont[rowNum])
            else:
                worksheet.write_string(rowNum+headRows, colNum , str(xlColCont[rowNum]))
    
    
    workbook.close()
    

    但是,如果不遍历每一列并一次性将整个pandas数据框写入excel文件,我该如何做同样的事情呢? 包括 write_rich_string 格式化?

    以下操作不起作用。

    writer = pd.ExcelWriter('pandas_with_rich_strings.xlsx', engine='xlsxwriter')
    workbook = xlsxwriter.Workbook('pandas_with_rich_strings.xlsx')
    worksheet = workbook.add_worksheet('pandas_df')
    df.to_excel(writer,'pandas_df')
    writer.save()
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   patrickjlong1    7 年前

    我不确定我的回答是否比你的回答好,但我把它简化为只使用一个for循环,并利用 pandas.DataFrame.to_excel() 最初将数据框架放入excel。请注意,我随后使用 worksheet.write_rich_string() .

    import pandas as pd
    
    writer = pd.ExcelWriter('pandas_with_rich_strings.xlsx', engine='xlsxwriter')
    workbook  = writer.book
    bold = workbook.add_format({'bold': True})
    italic = workbook.add_format({'italic': True})
    red = workbook.add_format({'color': 'red'})
    df = pd.DataFrame({
        'numCol': [1, 50, 327],
        'plainText': ['plain', 'text', 'column'],
        'richText': [
            ['This is ', bold, 'bold'],
            ['This is ', italic, 'italic'],
            ['This is ', red, 'red']
        ]
    }) 
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    worksheet = writer.sheets['Sheet1']
    # you then need to overwite the richtext column with
    for idx, x in df['richText'].iteritems():
        worksheet.write_rich_string(idx + 1, 2, *x)
    writer.save()
    

    带预期输出的.xlsx:

    Expected Outputted .xlsx