Open4
Rust , Excel (xlsxファイル) 編集 ダウンロード

概要
- Rust Excel 編集の例です。
- umya-spreadsheet 使う例です。
[ 公開 2025/07/06 ]
関連
環境
- Rust cargo 1.88.0
- Excel
テストしたコード
- Cargo.toml
[package]
name = "excel-test"
version = "0.1.0"
authors = ["naka"]
edition = "2021"
[dependencies]
umya-spreadsheet = "2.3.1"
- main.rs
- 追加book する例です。
- .set_value で、値が設定されました。
use umya_spreadsheet::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut book = new_file();
let _ = book.new_sheet("Sheet1");
let sheet = book.get_sheet_by_name_mut("Sheet1").unwrap();
// 値とスタイル設定
sheet.get_cell_mut("A1").set_value("テスト");
let mut style = sheet.get_style_mut("A1");
style.set_background_color(Color::COLOR_YELLOW);
style.get_borders_mut().get_bottom_mut().set_border_style(Border::BORDER_MEDIUM);
// 行・列追加
book.insert_new_row("Sheet1", &2, &1);
book.insert_new_column("Sheet1", "B", &1);
// 保存
writer::xlsx::write(&book, std::path::Path::new("result.xlsx"))?;
Ok(())
}
- run
cargo run .

既存の.xlsxファイルを、編集する。Rust Cli
- 既存のxlsx編集と、保存の例です。
環境
- Rust cargo 1.88.0
- Excel
テストしたコード
- Cargo.toml
[package]
name = "excel-test"
version = "0.1.0"
authors = ["naka"]
edition = "2021"
[dependencies]
umya-spreadsheet = "2.3.1"
- main.rs
- 既存xlsxファイルを、読み込む。
- 編集後
- 別名ファイルで、保存する。
- .set_value は、数値型は。コンパイル エラーになり、使えないようです。
- とりあえず。数値は 文字型に変換すると。設定できました。
use umya_spreadsheet::*; // クレート本体の読み込み
use std::path::Path;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1. 既存ファイルの読み込み
let path = Path::new("input.xlsx");
let mut book = reader::xlsx::read(path)?; // 普通に読み込み
// let mut book = reader::xlsx::lazy_read(path)?; // 大きいファイルの場合(遅延読み込み)
// 2. シート選択とセル編集
{
let sheet = book
.get_sheet_by_name_mut("Sheet1")
.ok_or("Sheet1 が見つかりません")?;
// セル A1 に文字列
sheet.get_cell_mut("A2").set_value("こんにちは、Rust!");
// セル B2 に数値
let mut num = 1011;
let mut s = num.to_string();
sheet.get_cell_mut("B2").set_value(&s);
num = 1012;
s = num.to_string();
sheet.get_cell_mut("B3").set_value(&s);
}
// 5. 編集した内容で新ファイルに保存
writer::xlsx::write(&book, Path::new("output.xlsx"))?;
Ok(())
}
- 編集後、保存

Rust axum , 既存の.xlsxファイルを 編集 ダウンロード
- Rust axum 使います。
- 既存のxlsx編集と、保存の例です。
環境
- Rust cargo 1.88.0
- axum server
- Excel
テストしたコード
- Cargo.toml
[package]
name = "excel_example"
version = "0.1.0"
edition = "2024"
[dependencies]
axum = "0.7.5"
tokio = { version = "1.0", features = ["full"] }
tokio-stream = "0.1.17"
tower-http = { version = "0.6.6", features = ["fs"] }
umya-spreadsheet = "2.3.1"
uuid = { version = "1.8.0", features = ["v4"] }
- 難航したので。 AIコーディングで作成依頼しました。
- main.rs
- 既存xlsxファイルを、読み込む。
- 編集後
- 別名ファイルで、保存する。
- header attachment; filename=out.xlsx のように、レスポンス返す。
- 出力後、追加ファイルは削除
async fn edit_download_excel() -> impl IntoResponse {
let inPath = Path::new("input.xlsx");
let mut book = reader::xlsx::read(inPath).unwrap(); // 普通に読み込み
let sheet = book.get_sheet_by_name_mut("Sheet1").unwrap();
// セル A1 に文字列
sheet.get_cell_mut("A2").set_value("こんにちは、Rust!");
sheet.get_cell_mut("B2").set_value("123");
sheet.get_cell_mut("C2").set_value("C-123");
let file_name = format!("{}.xlsx", Uuid::new_v4());
let path = Path::new(&file_name);
match writer::xlsx::write(&book, path) {
Ok(_) => {
let file_content = match fs::read(path) {
Ok(content) => content,
Err(_) => {
return Response::builder()
.status(StatusCode::INTERNAL_SERVER_ERROR)
.body(Body::from("Failed to read Excel file."))
.unwrap();
}
};
let _ = fs::remove_file(path);
let headers = [
(
header::CONTENT_TYPE,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
),
(
header::CONTENT_DISPOSITION,
"attachment; filename=\"edit_result.xlsx\"",
),
];
Response::builder()
.status(StatusCode::OK)
.header(headers[0].0.clone(), headers[0].1)
.header(headers[1].0.clone(), headers[1].1)
.body(Body::from(file_content))
.unwrap()
}
Err(_) => Response::builder()
.status(StatusCode::INTERNAL_SERVER_ERROR)
.body(Body::from("Failed to create Excel file."))
.unwrap(),
}
}

Postgres + xlsxファイルダウンロード , Rust axum + React
- 編集画面は、前のpostgres版 CRUD画面
- ダウンロードボタンを追加し。 excel バイナリダウンロードする。
書いたコード
- 一覧、ダウンロード追加
- excel