import streamlit as st
import docx
from io import BytesIO
import pandas as pd
def main():
# Streamlitアプリケーション
st.title("word出力")
# Documentオブジェクトを作成
doc = docx.Document()
# 1ページ目
with st.expander('1ページ目', expanded=True):
page1_title = 'サンプルドキュメント'
page1_body = st.text_area("ここに入力してください:", height=100, key='page1_body')
# ドキュメントの内容を追加
doc.add_heading(page1_title, 0)
doc.add_paragraph(page1_body)
# 2ページ目
with st.expander('2ページ目', expanded=True):
page2_title = 'サンプルドキュメント'
page2_body = st.text_area("ここに入力してください:", height=100, key='page2_body')
doc.add_heading('セクション1', level=1)
doc.add_paragraph('ここにセクション1の内容が入ります。')
doc.add_heading('セクション2', level=1)
doc.add_paragraph('ここにセクション2の内容が入ります。')
# バイナリストリームへの保存
bio = BytesIO()
doc.save(bio)
# ストリームの位置を先頭に戻す
bio.seek(0)
# ダウンロードボタンの表示
st.download_button(
label="Wordファイルをダウンロード",
data=bio.getvalue(),
file_name="prepared_document.docx",
mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
)
# サンプルデータを作成
data = {
'名前': ['Alice', 'Bob', 'Charlie', 'David'],
'年齢': [25, 30, 35, 40],
'職業': [
'エンジニア',
'デザイナー',
'マネージャー',
'アナリスト'
],
'備考': [
'長い文章の例として、このセルにはとても長い文章を入れています。この文章は通常のセルの内容よりもはるかに長いため、テーブルの表示がどのように変わるかを確認するのに役立ちます。',
'', # 2行目は空白
'', # 3行目は空白
'' # 4行目は空白
]
}
# プレービュー用にPandasデータフレームに変換
df = pd.DataFrame(data)
st.divider()
st.header('Excel出力')
with st.expander("Excel出力", expanded=True):
# サンプルのDataFrameを作成
df = pd.DataFrame({
'Column1': [1, 2, 3, 4],
'Column2': ['A', 'B', 'C', 'D']
})
edited_df = st.data_editor(df, num_rows="dynamic")
# Excel形式でダウンロードするボタン
def download_excel(data):
output = BytesIO()
with pd.ExcelWriter(output, engine='openpyxl') as writer:
data.to_excel(writer, sheet_name='Sheet1', index=False)
excel_data = output.getvalue()
return excel_data
st.download_button(
label='ここをクリックしてExcelファイルをダウンロード',
data= download_excel(edited_df),
file_name='data.xlsx',
mime='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
)
if __name__ == '__main__':
main()
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme