将dataframe的数据输出到excel设置格式和超链接,用的是pandas的函数ExcelWriter,不需要另外安装第三方包。

    #如果输出的数据中有url用这句代码可以解决url超长的问题
    writer = pd.ExcelWriter(f'{table_name}.xlsx',engine = 'xlsxwriter',options =                         
             {'strings_to_urls': False})
    df_all = pd.DataFrame()

    df_all.to_excel(writer,index = False)
    
    workbook = writer.book
    # set excel header format
    header_title = workbook.add_format({
        'font_size': 11,
        'bold': True,
        'fg_color': '660000',
        'border': 1,
        'text_wrap': True,
        "font_name": u"Consolas",
        "font_color":'#FFFAFA',
        "align" : 'center',
        'valign':'vcenter'
    })

    # set excel value format
    header_link = workbook.add_format({
        'font_size': 11,
        'text_wrap': True,
        'font_name': u"Consolas",
        'align' : 'center',
        'valign':'vcenter',
        'font_color' : 'blue'
    })

    # set excel value format
    header_value = workbook.add_format({
        'font_size': 11,
        'text_wrap': True,
        "font_name": u"Consolas",
        "align" : 'center',
        'valign':'vcenter'
    })
    sheet_table = writer.sheets['Sheet1']
    
    #设置每一列值的格式
    for col_num, value in enumerate(df_all.columns.values):
        sheet_table.write(0, col_num, value, header_title)

    for col_num, value in enumerate(df_all['ID'].values):
        sheet_table.write(col_num+1,0, value, header_value)


    for col_num, value in enumerate(df_all['count'].values):
        sheet_table.write(col_num+1,3, value, header_value)
     
     #设置宽度   
    sheet_table.set_column('A:A', 15)
    sheet_table.set_column('B:B', 30)
    sheet_table.set_column('C:C', 60)
    sheet_table.set_column('D:D', 30)


    for index,row in df_all.iterrows():
        # print(index,row['ID'])
        if row['count'] > 0:
            df = pd.read_excel('BDP_QC_Rule.xlsx')
            meta = df.loc[df["id"] == row['ID']]
            
            get_detial_data(writer,row['ID'],meta['Detial Sql'].values[0],table_name)
            #设置超链接
            rowc = int(int(index)+1)  
            
            '''支持两种本地URI:internal: 和external: 。它们用于指向内部工作表引用或外部工作表引用的超链接:
参数说明:
row:行号
col:列号
url:要设置的超链接地址
string:该链接显示的内容
cell_format:文字样式
'''     
            sheet_table.write_url(row=rowc,col=3,url=f'internal:    
            {str(row["ID"])}!A1:B1',string=str(row['count']),cell_format = header_link)    

最终的效果图如下:

 有超链接的是数字55的单元格,它指向名字为30的sheet页。

更多推荐