♻️
Rust(umya-spreadsheet)でExcelの書式を取得する
はじめに
今回はRustのumya-spreadsheetというライブラリを使って、
Excelのセルの書式設定を取得してみました。
前回のPythonでの試みと同様に、RustでExcelをHTMLに変換できるのでしょうか!?
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の以下ドキュメントを確認すると、
上下左右中央の配置や、数値書式なども取得できるとのこと。
ですが、ExcelからHTMLに変換するにはPythonでの試みと同様に
セルの書式をCSSに変換する処理や、マージセルの考慮などが必要です。
やはり再現度高くExcelをHTMLに変換するには、なかなか大変です😵
Discussion