1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RustExcelというumya-spreadsheetを使いやすくするライブラリを作った

Last updated at Posted at 2025-03-04

以前 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 クレートを活用しています。
Sample Xlsx

サンプル ソースコード

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_spreadsheetSpreadsheet オブジェクト、アクティブなシート、およびその他の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 はいつでも歓迎します。大きな変更を行う前に、提案をご検討ください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?