はじめに
ReoGrid は、WinForms / WPF アプリケーションに Excel ライクなスプレッドシート機能を提供する .NET コンポーネントです。
このたびリリースした ReoGrid 4.5 は、数式まわりの大幅な機能強化と、大規模 Excel ファイルの読み込み性能・メモリの抜本的な改善を柱としたバージョンです。Excel 互換の数式関数を一度に 47 種追加し、Excel / Google スプレッドシートと同じ操作感の「数式ポイントモード編集」にも対応しました。
本記事では 4.5 の主要な変更点をご紹介します。
主要なポイント
- 数式関数を 47 種追加:
IFERROR/SUMIFS/INDEX/TEXT/ 日付・統計関数、日本語向けのJIS/ASCなど - 数式のポイントモード編集: 編集中にセルをクリック・ドラッグして参照を入力。参照は色分けでハイライト
- XLSX アウトライン(グループ化)の入出力: 行・列のグループ化を Excel ファイルと相互にやり取り
- 読み込み性能・メモリの大幅改善: 独自の高速パーサーとシートの遅延読み込みで、1,000 万セル規模のメモリ使用量を最大 約 37% 削減
- XLSX インポートの互換性強化: 複数セクション書式・テーマカラー・OLE / 画像 など
ご注意(重要): v4.5 以降はライセンスキーの設定が必須になりました。アップグレードの際は、利用前に
ReoGridLicense.SetLicense(string)を呼び出してください。詳しくは後述のライセンスについてをご覧ください。
数式関数を 47 種追加
業務でよく使われる関数を中心に、Excel 互換の数式関数を一度に 47 種追加しました。
| カテゴリ | 追加した関数 |
|---|---|
| 論理・条件 | IFERROR、IFS、SUMIFS、COUNTIFS、AVERAGEIFS |
| 検索・参照 | INDEX、OFFSET、CHOOSE |
| 数学・統計 | ROUNDUP、ROUNDDOWN、INT、TRUNC、SQRT、SIGN、PI、SUMPRODUCT、RANK、LARGE、SMALL、MEDIAN、STDEV、STDEVP、VAR、VARP |
| 日付・時刻 | DATE、DATEVALUE、TIMEVALUE、WEEKDAY、WEEKNUM、EDATE、EOMONTH、NETWORKDAYS、WORKDAY |
| 文字列 | TEXT、SUBSTITUTE、REPLACE、CONCAT、CONCATENATE、TEXTJOIN |
| 情報 | ISTEXT、ISNONTEXT、ISNA、ISLOGICAL、ISEVEN、ISODD |
| 日本語向け | JIS、ASC、DBCS、簡易版の PHONETIC |
複数条件の集計やエラー処理など、これまで自前のロジックで実装していた処理を、Excel と同じ数式でそのまま記述できます。
// 複数条件の合計(東京 かつ 1000 以上)
sheet["E1"] = "=SUMIFS(C2:C100, A2:A100, \"東京\", B2:B100, \">=1000\")";
// エラーを安全に処理
sheet["E2"] = "=IFERROR(VLOOKUP(A2, Master!A:C, 3, FALSE), \"未登録\")";
// 数値を書式付き文字列に変換
sheet["E3"] = "=TEXT(A3, \"#,##0\")";
追加された関数を含む組み込み関数の一覧は、数式関数リファレンスでご確認いただけます。
数式のポイントモード編集
数式の編集中にセルをクリックすると、編集を終了せずにカーソル位置へセル参照を挿入・置換できるようになりました。Excel / Google スプレッドシートと同じ操作感です。
- セルをクリックすると、その参照がカーソル位置に挿入されます
- そのままドラッグすると、範囲参照に拡張されます
- 矢印キーでアクティブな参照を移動できます
- 数式に含まれるすべての参照は、色分けでハイライト表示されます
さらに、ハイライトされた参照の枠を直接操作して編集できます。枠の辺をドラッグすれば参照の移動、四隅をドラッグすればリサイズができ、Excel と同じ「中心線で含む/含まないが切り替わる」ルールに沿って範囲を調整できます。
エンドユーザーがアプリ上で数式を組み立てる場面で、入力ミスを減らし、Excel と変わらない使い勝手を提供できます。
XLSX アウトライン(グループ化)の入出力
行・列の**アウトライン(グループ化)**を、Excel ファイルと相互にやり取りできるようになりました。アウトラインのレベルや折りたたみ状態を保持したまま、読み込み・書き出しが行えます。
あわせて、アウトラインの展開・折りたたみボタンの表示位置を、行・列で個別に指定できる API を追加しました。
// 行はアウトラインボタンを上側、列は左側に配置
sheet.RowOutlineButtonLocation = OutlineButtonLocation.Top;
sheet.ColumnOutlineButtonLocation = OutlineButtonLocation.Left;
読み込み性能・メモリの大幅改善
大規模な Excel ファイルの読み込みを、処理時間・メモリの両面で抜本的に見直しました。
- 独自のストリーミングパーサー: シートを直接読み取り、読み込み時の中間データ生成を抑えました
- シートの遅延読み込み: 多数のシートを持つブックは、開いているシートだけを先に読み込み、残りは初回アクセス時に展開します
- メモリ使用量の削減: 1,000 万セル規模のブックでメモリ使用量を 約 37% 削減(3.9 GB → 2.5 GB)。さらに表示領域に応じたスタイル評価により、メモリを 約 40%、読み込み時間を 約 60% 削減しました
- 読み込みの高速化: 表示形式パターンのキャッシュや参照解決の最適化により、セルの読み込み処理を 約 50% 高速化 しました
大量データの読み込み後にスタイルキャッシュを解放する API も追加しています。
// 一括読み込み後にキャッシュ済みスタイルを解放
sheet.ClearStyleCache();
メモリ最適化の考え方とベンチマークについては、今後あらためてご紹介する予定です。
XLSX インポートの互換性強化
実際の業務ファイルでよく見られるパターンへの対応を強化しました。
- 複数セクション書式: 条件付き・複数セクションのカスタム表示形式に対応
- テーマカラー: 明暗が入れ替わって読み込まれる問題を修正し、正しい色で表示されるように
- リッチテキスト: 書式(太字の有無)の解釈と、改行ごとの行分割に対応
- 画像・OLE: セル位置に固定された画像(スタンプ等)と、埋め込み OLE オブジェクトのプレビュー画像の表示に対応
- インライン文字列: インライン文字列のセルをテキストとして読み込むように
不具合修正
主な修正は次のとおりです。
- 数式: 関数名の入力途中にセルをクリックすると、まれにクラッシュする問題を修正
- スタイル: スタイルを共有しているセルの 1 つを変更すると、他のセルまで一緒に変わってしまう問題を修正
- スタイル / フォント: フォントを継承するセルが、編集確定時や再描画時にサイズ・太さが変化してしまう問題を修正
- 印刷: 空シートが 2 ページに分割される問題、ページ区切りのドラッグ時に例外が発生する問題などを修正
- Excel 取り込み: 分割ウィンドウを固定枠と誤認してシート読み込みがクラッシュする問題を修正
追加された API
v4.5 で新しく利用できる主な API は次のとおりです。
// メモリ解放
sheet.ClearStyleCache();
sheet.ClearStyleCache(new RangePosition("A1:Z1000"));
// 行・列ごとのアウトラインボタン位置
sheet.RowOutlineButtonLocation = OutlineButtonLocation.Top;
sheet.ColumnOutlineButtonLocation = OutlineButtonLocation.Left;
// 遅延ロード用データソース(範囲を自動推定)
sheet.AddDataSource(myLazySource, DataSourceLoadMode.LazyLoading);
ライセンスについて
v4.5 以降は、ライセンスキーの設定が必須になりました。
利用前に ReoGridLicense.SetLicense(string) で有効なライセンスキーを設定してください。未設定の場合、グリッド全体にグレーのオーバーレイが表示され、マウス・キーボード操作、セル編集、印刷がブロックされます。
// アプリケーションの起動時などに一度だけ設定します
ReoGridLicense.SetLicense("(カスタマーポータルで取得したライセンスキー)");
- ライセンスキーはデジタル署名で改ざんを検証します。
- ライセンスキーは、カスタマーポータル(https://portal.unvell.com/)から取得できます。
アップグレード方法
ReoGrid V4 以降は商用版として提供しています。最新のアセンブリは、カスタマーポータルにサインインしてダウンロードできます。
- カスタマーポータル: https://portal.unvell.com/
既存プロジェクトでは、参照しているアセンブリをダウンロードしたバージョンに置き換えたうえで、起動時に ReoGridLicense.SetLicense(string) を呼び出すようコードを追加してください。
おわりに
ReoGrid 4.5 は、数式の表現力と操作性の強化、そして大規模 Excel ファイルの読み込み性能・メモリの改善に焦点を当てたリリースです。
Excel に近い数式機能をアプリ上でそのまま提供したい場合や、大きなブックの読み込みに時間がかかっていた場合は、ぜひ 4.5 でお試しください。