以前 golangでもgoexcelというラッパーを作ったことがあるが、最近rustを始めたので、その練習を兼ねて RustExcelというumya-spreadsheetのラッパーを作った。
umya-spreadsheetは非常に多機能で、豊富な関数が定義されているが、作るのに時間が掛かります。
サンプルを見て頂くと分かるとおもいますが、大分入力の手間が減りました。
今回は新しい言語ということもあり、またrustのライフタイム管理に慣れていないので、手こずりましたが、AI(Microsoft Copilot,Github Copilot,Gemini)に大変助けられました。
下記のReadmeもGeminiにプログラムをアップロードして、作って貰ったものがベースです。
その後追加した関数の説明を加えたり、サンプルの追加程度で、内容はほとんどGeminiが作ったままです。
まだcrates.ioには未登録ですが Github https://github.com/mikeshimura/rust-excel
に置いてありますので、使用できます。
下記にreadmeの日本語版を転載します。
RustExcel: Rust での Excel ファイル操作ライブラリ
RustExcel は、Excel (.xlsx) ファイルの作成と操作を簡素化するために設計された Rust ライブラリです。Excel スプレッドシートを操作するための高レベルな RustExcel
オブジェクトを提供し、一般的なタスクをより簡単に実行できるようにします。内部では、RustExcel は .xlsx ファイル形式の複雑な処理に umya_spreadsheet
クレートを活用しています。
サンプル ソースコード
fn sample() {
let mut re = RustExcel::new();
let mut book: &mut Spreadsheet = re.get_book();
re.new_sheet("Sample");
re.set_column_width(1,1,17.5);
re.set_column_width(2,7,10.0);
re.set_row_height(1,1,33.8);
re.set_font_color("A1:G1", "0067C0");
re.set_background_color("A1:G1", "FFFF00");
re.set_font_size("A1:D1", 20.0);
re.set_font_size("E1:G1", 14.0);
re.set_cell_string("B1", "RustExcelTest");
re.set_cell_string("E1", "Masanobu Shimura");
re.set_vertical_aliginment("E1:G1", VerticalAlignmentValues::Bottom);
re.set_border_style("A1:G1", "tblr", BorderStyleValues::Thick);
re.set_border_all("A3:G5", "tblr", BorderStyleValues::Thin);
re.set_border_style("A3:G5", "tblr", BorderStyleValues::Thick);
re.set_background_color("A3:G3", "dcdcdc");
re.set_font_style_bold("A3:G3", true);
re.set_row(3);
re.set_cell_string_by_col_number(1, "Date");
re.set_cell_string_by_col_number(2, "String");
re.set_cell_string_by_col_number(3, "Italic");
re.set_cell_string_by_col_number(4, "Bold");
re.set_cell_string_by_col_number(5, "Underline");
re.set_cell_string_by_col_number(6, "Number");
re.set_cell_string_by_col_number(7, "Number");
re.set_cell_date("A4", 2025, 03, 03, 12, 00, 00);
re.set_number_format("A4", "yyyy/mm/dd hh:mm".to_string());
re.set_cell_string_by_coordinate(4,2, "RustExcel");
re.set_cell_string_by_coordinate(4,3, "RustExcel");
re.set_cell_string_by_coordinate(4,4, "RustExcel");
re.set_cell_string_by_coordinate(4,5, "RustExcel");
re.set_font_style_italic("C4", true);
re.set_font_style_bold("D4", true);
re.set_font_style_under_line("E4", UnderlineValues::Single);
re.set_cell_number("F4", 123456.0);
re.set_number_format("F4", "#,##0.00".to_string());
re.set_cell_number("G4", 12345.0);
re.set_number_format("G4", "#,##0".to_string());
re.save("sample.xlsx");
}
主な機能
-
RustExcel構造体ベースの操作: RustExcel のコアは
RustExcel
構造体であり、Excel スプレッドシートを管理するための中央拠点として機能します。 -
シート管理:
- 指定された名前で新しいシートを作成します。
- インデックスまたは名前でアクティブなシートを設定します。
- 変更のためにアクティブなシートにアクセスします。
-
セル操作:
- セルに文字列、数値、または日付の値を設定します。
- より高度な操作のためにセルオブジェクトを取得します。
- 座標 ("A1" など) または行番号と列番号でセルにアクセスします。
-
スタイル管理:
- フォント プロパティ (名前、サイズ、太字、斜体、下線、取り消し線) を設定します。
- フォントの色を設定します。
- 文字列の水平・垂直配置を設定します。
- 罫線のスタイルを設定します。
- 背景色を設定します。
- 数値形式を設定します。
-
日付:
- セルに日付を設定します。
-
範囲:
- 範囲を解析します。
コア コンポーネント
RustExcel
RustExcel
構造体は、RustExcel で Excel ファイルを操作するための主要なインターフェイスです。umya_spreadsheet
の Spreadsheet
オブジェクト、アクティブなシート、およびその他のRustExcel構造体情報を管理します。
主なメソッド:
-
new()
: 新規の空の Excel ファイル RustExcel構造体を作成します。 -
read(path)
: Excel ファイル を読み込み RustExcel構造体を作成します。 -
get_book()
: 基になるSpreadsheet
オブジェクトへの可変参照を返します。 -
new_sheet(name: &str)
: 指定された名前で新しいシートを作成し、アクティブなシートとして設定します。 -
set_sheet_by_index(index: usize)
: インデックス (0 ベース) でアクティブなシートを設定します。 -
set_sheet_by_name(name: &str)
: 名前でアクティブなシートを設定します。 -
get_sheet()
: アクティブなシートへの参照を返します。 -
get_sheet_mut()
: アクティブなシートへの可変参照を返します。 -
set_row(row: u32)
: 現在の行を設定します。 -
get_row()
: 現在の行を取得します。 -
set_row_height(row_from: u32,row_to:u32, height: f64) )
: 行の高さを設定します。 -
set_column_width(col_from: u32,col_to:u32, width: f64)
: 列の幅を設定します。 -
set_cell_string(cell: &str, value: &str)
: セルの文字列値を設定します (例: "A1")。 -
set_cell_number(cell: &str, value: f64)
: セルに数値を設定します。 -
set_cell_date(cell: &str, year: u32, month: u32, day: u32, hour: u32, minute: u32, second: u32)
: セルに日付を設定します。 -
set_cell_string_by_coordinate(row: u32, col: u32, value: &str)
: 行番号と列番号でセルの文字列値を設定します。 -
set_cell_number_by_coordinate(row: i32, col: i32, value: f64)
: 行番号と列番号でセルの数値を設定します。 -
set_cell_date_by_coordinate(&mut self,row: i32,col: i32,year: u32,month: u32,day: u32,hour: u32,minute: u32,second: u32)
: 行番号と列番号でセルに日付を設定します -
get_cell(cell: &str)
: 座標でセルへの可変参照を取得します。 -
get_cell_by_coordinate(row: u32, col: u32)
: 行番号と列番号でセルへの可変参照を取得します。 -
get_cell_by_col(col: u32)
: 現在の行の列番号でセルへの可変参照を取得します。 -
get_style(cell: &str)
: セルのスタイルへの可変参照を取得します。 -
get_style_by_coordinate(row: u32, col: u32)
: 行番号と列番号でセルのスタイルへの可変参照を取得します。 -
get_style_by_col(col: u32)
: 現在の行の列番号でセルのスタイルへの可変参照を取得します。 -
set_font_size(range: &str, font_size: f64)
: 範囲内のフォント サイズを設定します。 -
set_font_style_bold(range: &str, font_style: bool)
: 範囲内のフォントを太字に設定します。 -
set_font_style_italic(range: &str, font_style: bool)
: 範囲内のフォントを斜体に設定します。 -
set_font_style_under_line(range: &str, value: UnderlineValues)
: 範囲内のフォントに下線を設定します。 -
set_font_style_strike(range: &str, value: bool)
: 範囲内のフォントに取り消し線を設定します。 -
set_font_name(range: &str, value: &str)
: 範囲内のフォント名を設定します。 -
set_font_char_set(range: &str, value: FontCharSet)
: フォントの文字セットを設定します。 -
set_font_color(range: &str, value: &str)
: 範囲内のフォントの色を設定します。 -
set_border_style(range: &str, pos: &str, border_style: BorderStyleValues)
: 範囲内の罫線のスタイルを設定します。 -
set_border_all(range: &str, pos: &str, border_style: BorderStyleValues)
: 範囲内のすべての罫線を設定します。 -
set_background_color(range: &str, value: &str)
: 範囲内の背景色を設定します。 -
set_number_format(range: &str, value: String)
: 範囲内の数値形式を設定します。 -
set_horizontal_aliginment(range: &str, value: HorizontalAlignmentValues)
:水平方向の文字列配置を設定します。 -
set_vertical_aliginment(range: &str, value: VerticalAlignmentValues)
:垂直方向の文字列配置を設定します。 -
save(path: &str)
: 指定されたパスに Excel ファイルを保存します。
依存関係
-
umya_spreadsheet
: 中核となる Excel ファイル処理ライブラリ。 -
regex
: セル範囲の解析に使用します。 -
chrono
: 日付と時刻の管理に使用します。
インストール方法
Cargo.toml
ファイルに以下を追加します。
[dependencies]
rustexcel = "0.1" # 実際のバージョン番号に置き換えてください
umya_spreadsheet = "2.2.3"
regex = "1"
chrono = "0.4"
ライセンス
MIT
貢献
Pull Request はいつでも歓迎します。大きな変更を行う前に、提案をご検討ください。