【Streamlit学习笔记】实现包含多个sheet的excel文件下载

news/2024/7/10 18:58:38 标签: excel, streamlit, python, vscode, 经验分享, 开源, web
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

1、什么是Streamlit

Streamlit是一个免费的开源框架,用于快速构建和共享漂亮的机器学习和数据科学Web应用程序,官网链接 Streamlit
Streamlit API链接 API reference
实际项目中遇到的问题:包含多个sheet的excel文件下载,下面将给出实现程序

excel_4">2、st.download_button下载excel文件

官网给出的参考程序,下载csv文件例程如下:

python">import streamlit as st

@st.cache_data
def convert_df(df):
    # IMPORTANT: Cache the conversion to prevent computation on every rerun
    return df.to_csv().encode('utf-8')

csv = convert_df(my_large_df)

st.download_button(
    label="Download data as CSV",
    data=csv,
    file_name='large_df.csv',
    mime='text/csv',
)

如上所述程序,测试发现无法下载包含多个sheet的excel文件

excel_26">3、st.download_button下载包含多个sheet的excel文件

废话不多说,直接给出程序:

python">from io import BytesIO
import streamlit as st
import pandas as pd

xlsx_files_path = 'excel文件路径'
df = pd.read_excel(xlsx_files_path,sheet_name=None,header=0,index_col=0)
excel_keys = list(df.keys())
output = BytesIO()
writer = pd.ExcelWriter(output, engine='xlsxwriter')
for k in range(len(excel_keys)):
	df = pd.read_excel(xlsx_files_path,sheet_name=excel_keys[k],header=0,index_col=0)
	df.to_excel(writer, sheet_name=excel_keys[k])
writer.close()
st.download_button('📥下载文件至本地', data = output.getvalue(), file_name = 'excel文件名', mime="application/vnd.ms-excel")

亲测有效,下载成功!!!效果如图所示:

在这里插入图片描述

excel_48">4、多个sheet的excel文件非常大的情况

如果需要下载的excel文件非常大,上述程序每次加载会非常慢,现对其进行优化

首先使用st.cache_data的方式,但是其只能解决首次加载后,可快速加载,文件的首次加载仍然耗时严重

python">from io import BytesIO
import streamlit as st
import pandas as pd

@st.cache_data
def output_xlsx(xlsx_files_path):
    df = pd.read_excel(xlsx_files_path,sheet_name=None,header=0,index_col=0)
    excel_keys = list(df.keys())
    output = BytesIO()
    writer = pd.ExcelWriter(output, engine='xlsxwriter')
    for k in range(len(excel_keys)):
        df = pd.read_excel(xlsx_files_path,sheet_name=excel_keys[k],header=0,index_col=0)
        df.to_excel(writer, sheet_name=excel_keys[k])
    writer.close()
    return output
xlsx_files_path = 'excel文件路径'
output = output_xlsx(xlsx_files_path)
st.download_button('📥下载文件至本地', data = output.getvalue(), file_name = 'excel文件名', mime="application/vnd.ms-excel") 

如果想excel文件首次即快速下载至本地,可换种思路,通过zip文件下载

python">import streamlit as st
import zipfile

xlsx_files_path = 'excel文件路径'
zip_file = zipfile.ZipFile(xlsx_files_path.split('.xlsx')[0]+'.zip','w')
zip_file.write(xlsx_files_path,'excel文件名')
zip_file.close()
zip_file_data = open(xlsx_files_path.split('.xlsx')[0]+'.zip', "rb")
with zip_file_data as fp:
	download_flag = st.download_button('📥下载文件至本地', data = fp, file_name = 'excel文件名'+'.zip', mime="application/zip")
zip_file_data.close()

直行无法解决,那就绕行,哈哈!!!

希望本文对大家有帮助,上文若有不妥之处,欢迎指正

分享决定高度,学习拉开差距


http://www.niftyadmin.cn/n/5431869.html

相关文章

MC78L05ACDR2G线性稳压器芯片中文资料规格书PDF数据手册引脚图参数图片价格

产品概述: MC78L00A系列线性稳压器价格便宜,易于使用,适用于各种需要最高100mA的调节电源的应用。与大功率MC7800和MC78M00系列一样,这款稳压器也提供内部电流限制和高温关断,因此非常坚固耐用。在很多应用中&#xf…

Unity类银河恶魔城学习记录10-10 p98 UI health bar源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili HealthBar_UI.cs using System.Collections; using System.Collections.G…

C#关闭程序 CefSharp.BrowserSubprocess.exe,执行控制台命令

执行控制台命令,关闭大量的CefSharp.BrowserSubprocess进程, 控制台命令: taskkill /f /im CefSharp.BrowserSubprocess.exe 有权限要求: 需要设置执行程序为管理员模式,IIS部署的应用程序,设置应用程序池…

Vue3 依赖注入provide与inject

简介 关于provide与inject下面是vue官网上的一些介绍 通常情况下,当我们需要从父组件向子组件传递数据时,会使用props。想象一下这样的结构:有一些多层级嵌套的组件,形成了一颗巨大的组件树,而某个深层的子组件需要一个…

ai智能外呼机器人的功能,机器人对话常用语模板搭建

智能外呼机器人就是用来往外呼出打电话的;经常看到有文章说电话机器人将要代替传统人工话务员、电话销售员要失业了、外呼机器人要颠覆电销革命了等等,我想说的是,目前市场上的电话机器人还远远不能达到,未来几年内也不一定会实现。 下面就简…

ctf_show笔记篇(web入门---代码审计)

301:多种方式进入 从index.php页面来看 只需要访问index.php时session[login]不为空就能访问 那么就在访问index.php的时候上传login 随机一个东西就能进去从checklogin页面来看sql注入没有任何过滤 直接联合绕过 密码随意 还有多种方式可以自己去看代码分析 30…

测评报告|2024 年主流实时音视频SDK提供商

引言 随着2024年的到来,实时通讯(RTC)技术已成为推动数字经济发展的关键因素。从最基础的文本、音频和视频通信扩展到即时消息、文件共享、语音呼叫、直播互动以及视频会议等多元化功能,RTC技术在各个行业中的应用日益广泛。根据…

汽车大灯罩汽车尾灯罩破裂裂纹破损破洞掉角崩角等问题能修复吗?怎么修复?

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题是一定可以修复的。 汽车灯罩的修复方法取决于灯罩的破损程度和材质。以下是一些常见的汽车灯罩修复方法: 肥皂水清洗:如果灯罩只是轻微模糊或发黄,可以使用肥皂水进行清洗。将肥皂水涂抹在…