【问题标题】:download python-pptx from streamlit从 streamlit 下载 python-pptx
【发布时间】:2022-11-10 15:37:01
【问题描述】:

我正在使用python-pptxstreamlit。我正在从 python 中创建一个 ppt,如下所示:

from pptx import Presentation
import streamlit as st

prs = Presentation()
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]

title.text = "Hello, World!"
subtitle.text = "python-pptx was here!"

#prs.save('test.pptx') # This works, just saves it in the app path.
# But I want a clickable button, to be downloaded from the streamlit app.
# Therefore, I've tried to do this: 

st.download_button(label = 'Download ppw', data = prs, file_name = 'my_power.ppt')

但我收到以下错误:

RuntimeError: Invalid binary data format: <class 'NoneType'>

复制要求:

安装 streamlit (pip install streamlit)

安装 python-pptx (pip install python-pptx)

【问题讨论】:

  • 哦,真的很抱歉!我在度假:P。惊人的!!非常感谢@StefanoFiorucci-anakin87

标签: python streamlit python-pptx


【解决方案1】:

我从this answer 获得灵感,我明白了你必须生成一个二进制表示为您的 Presentation 对象。

from pptx import Presentation
import streamlit as st
from io import BytesIO

prs = Presentation()
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]

title.text = "Hello, World!"
subtitle.text = "python-pptx was here!"

# save the output into binary form
binary_output = BytesIO()
prs.save(binary_output) 

st.download_button(label = 'Download ppw',
                   data = binary_output.getvalue(),
                   file_name = 'my_power.pptx')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2021-08-06
    • 2022-08-16
    • 2017-02-11
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多