フリーランスエンジニアとして活動していて、現在携わっている案件ではRustとTauriを使ってExcelファイルを出力するデスクトップアプリを開発しています。先日、顧客から出力するExcelファイルで1行目を固定して常に表示するようにしたいという要望があり、RustでExcelのウィンドウ枠を固定する方法を調べました。

RustでExcelファイルを書き込むためのライブラリはいくつかありますが、ウィンドウ枠を固定できたのが「xlsxwriter-rs」だった(他にもあるかもしれませんが)ので、今回は「xlsxwriter-rs」を使用します。

xlsxwriter-rsでExcelのウィンドウ枠を固定するにはfreeze_panesメソッドを使用します。第一引数に固定する行番号、第二引数には固定する列番号を渡します。固定しない場合は0を指定します。

pub fn freeze_panes(&mut self, row: WorksheetRow, col: WorksheetCol)

The Worksheet::freeze_panes function can be used to divide a worksheet into horizontal or vertical regions known as panes and to “freeze” these panes so that the splitter bars are not visible.
The parameters row and col are used to specify the location of the split. It should be noted that the split is specified at the top or left of a cell and that the function uses zero based indexing. Therefore to freeze the first row of a worksheet it is necessary to specify the split at row 2 (which is 1 as the zero-based index).
You can set one of the row and col parameters as zero if you do not want either a vertical or horizontal split.

 

freeze_panesメソッドを使用して1行目と1列目でウィンドウ枠を固定するサンプルコードを載せます。

use std::path::Path;
use rust_xlsxwriter::Workbook;

let mut book = Workbook::new();
let sheet = book.add_worksheet();
sheet.set_freeze_panes(1, 1)?;
sheet.write_string(0, 0, "Header1")?;
sheet.write_string(0, 1, "Header2")?;
for i in 1..101 {
    sheet.write_number(i as u32, 0, i as f64)?;
    sheet.write_number(i as u32, 1, (i * 2) as f64)?;
}
book.save(Path::new("test.xlsx"))?;
スクリーンショット 2023-04-30 0.27.18.png

↑のスクリーンショットではちょっと分かりづらいですが、無事RustでもExcelのウィンドウ枠の固定が実現できました。

广告
将在 10 秒后关闭
bannerAds