♻️

Rust(umya-spreadsheet)でExcelの書式を取得する

2023/09/23に公開

はじめに

今回はRustのumya-spreadsheetというライブラリを使って、
Excelのセルの書式設定を取得してみました。
前回のPythonでの試みと同様に、RustでExcelをHTMLに変換できるのでしょうか!?

https://github.com/MathNya/umya-spreadsheet

Excelファイルを読み込む

先ずはExcelファイルを読み込み、シートとセルを取得します。

extern crate umya_spreadsheet;

const FILE_NAME: &str = "example.xlsx";
const SHEET_INDEX: usize = 0;
const CELL_ADDRESS: &str = "A1";

fn main() {
    let path = std::path::Path::new(FILE_NAME);
    let book = umya_spreadsheet::reader::xlsx::read(path).unwrap();
    let worksheet = book.get_sheet(&SHEET_INDEX).unwrap();
    let cell = worksheet.get_cell(CELL_ADDRESS).unwrap();
}

セルの書式を取得する

以下で各書式設定を取得できます。

フォント

    let cell_style = cell.get_style().clone();
    let font = cell_style.get_font().clone().unwrap();
    
    println!("Font Name: {}", font.get_name());
    println!("Font Size: {}", font.get_size());
    println!("Font Bold: {}", font.get_bold());
    println!("Font Italic: {}", font.get_italic());

取得例:

Font Name: Arial
Font Size: 12
Font Bold: true
Font Italic: false

背景色

    let fill = cell_style.get_fill().clone().unwrap();
    let pattern_fill = fill.get_pattern_fill().clone().unwrap();
    println!("Background Color: {:?}", pattern_fill.get_background_color());

取得例:

Some(Color {
  argb: StringValue {
    value: Some("FFB6D7A8"),
  },
  :
})

罫線

    let borders = cell_style.get_borders().clone().unwrap();
    
    println!("Border Bottom: {:?}", borders.get_bottom());

取得例:

Border {
  color: Color {
    argb: StringValue {
      value: Some("FF000000"),
    },
    :
  },
  style: EnumValue {
    value: Some(Thick),
    value_default: None,
  },
}

おわりに

umya-spreadsheetの以下ドキュメントを確認すると、
上下左右中央の配置や、数値書式なども取得できるとのこと。
https://docs.rs/umya-spreadsheet/latest/umya_spreadsheet/structs/struct.Style.html

ですが、ExcelからHTMLに変換するにはPythonでの試みと同様に
セルの書式をCSSに変換する処理や、マージセルの考慮などが必要です。

やはり再現度高くExcelをHTMLに変換するには、なかなか大変です😵

コラボスタイル Developers

Discussion