Streamlit输出可下载xlsx文件到浏览器

Streamlit以及业界给出的示例大多为针对csv文件的,但在实践中,数据经过处理后以xlsx文件输出的需求也不少。xlsx文件更接地气,更接近最终用户的需求。
openpyxl是我最喜爱的xlsx文件处理工具,速度快功能强大,在使用Streamlit自作网站的时候自然优先选用。
base64可理解为一种加密工具,将文件输出到前端浏览器需要使用其解码和加密。不过base64只能读取二进制文件,这也是为何下列代码中将保存在内存中的字节文件重新读取为二进制文件。
为简化篇幅,以下代码已经过极大的简化,原始代码请参考我的作品,目前已由中秋版更新至国庆版。

点击查看代码
import streamlit as st
import openpyxl
import base64

xlsx_exporter=openpyxl.Workbook()
sheet=xlsx_exporter.active
sheet.cell(row=1,column=1).value='Thank'
sheet.cell(row=1,column=2).value='You'
sheet.cell(row=1,column=3).value='Python'
xlsx_exporter.save('results.xlsx')#注意!文件此时保存在内存中且为字节格式文件
data=open('results.xlsx','rb').read()#以只读模式读取且读取为二进制文件
b64 = base64.b64encode(data).decode('UTF-8')#解码并加密为base64
href = f'<a href="data:file/data;base64,{b64}" download="myresults.xlsx">Download xlsx file</a>'#定义下载链接,默认的下载文件名是myresults.xlsx
st.markdown(href, unsafe_allow_html=True)#输出到浏览器
xlsx_exporter.close()

posted @ 2024-02-18 16:19  赏金猎人小熊  阅读(156)  评论(0编辑  收藏  举报