python 输出数据到excel设置超链接及格式设置
·
将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页。
更多推荐



所有评论(0)