スポンサーリンク

【Streamlit】Excelテンプレートへ値を設定しダウンロードリンクを作成

記事内に広告が含まれています。

Excelテンプレートのセルへ値を設定して、ダウンロードリンクを作成するStreamlitのコードをメモしておきます。

streamlit、pandas、openpyxlを予めインストールしておきます。

import streamlit as st
import pandas as pd
from openpyxl import load_workbook
from io import BytesIO
import base64

# データフレームの例
df = pd.DataFrame({
    'Name': ['Alice', 'Bob'],
    'Age': [30, 25],
    'City': ['New York', 'Los Angeles']
})

# StreamlitアプリのUI部分
st.set_page_config(layout="wide")
st.title('Excelテンプレートへのデータ設定とダウンロード')

# Excelテンプレートファイルのパス
template_path = 'path/to/your/excel_template.xlsx'

# テンプレートファイルを読み込み
wb = load_workbook(template_path)

# アクティブなワークシートを取得
ws = wb.active

# データフレームの値をExcelに設定(ここでは例としてA2セルに'Name'の最初の値を設定)
ws['A2'] = df['Name'][0]

# メモリ内でExcelファイルを生成
output = BytesIO()
wb.save(output)
excel_data = output.getvalue()
output.close()

# ExcelファイルをBase64エンコード
encoded = base64.b64encode(excel_data).decode()

# ダウンロードリンクを生成
href = f'<a href="data:application/octet-stream;base64,{encoded}" download="downloaded_excel.xlsx">Download Excel file</a>'

# Streamlitページにリンクを埋め込む
st.markdown(href, unsafe_allow_html=True)

openpyxlを使用してExcelテンプレートファイルを読み込み、特定のセルにデータフレームの値を設定した後、BytesIOオブジェクトを使用してメモリ内でExcelファイルを生成し、そのバイトデータをBase64エンコードしています。

最後に、エンコードされたデータを含むダウンロードリンクをHTMLのアンカータグとして生成し、st.markdownを使用してStreamlitアプリに埋め込んでいます。

この方法を使用すると、サーバー上に一時ファイルを作成せずに、ユーザーに対してExcelファイルのダウンロードリンクを提供できます。

ダウンロードしたファイルを開くとA2セルに値が設定されています。

なお、値を設定するセルを行番号、列番号で指定する方法は以下のとおりです。

# 第2行第1列のセルに値を設定('A2'セルに相当)
ws.cell(row=2, column=1, value=df['Name'][0])
スポンサーリンク
Python
著者SNS
タイトルとURLをコピーしました