はじめに

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 種追加しました。

カテゴリ追加した関数
論理・条件IFERRORIFSSUMIFSCOUNTIFSAVERAGEIFS
検索・参照INDEXOFFSETCHOOSE
数学・統計ROUNDUPROUNDDOWNINTTRUNCSQRTSIGNPISUMPRODUCTRANKLARGESMALLMEDIANSTDEVSTDEVPVARVARP
日付・時刻DATEDATEVALUETIMEVALUEWEEKDAYWEEKNUMEDATEEOMONTHNETWORKDAYSWORKDAY
文字列TEXTSUBSTITUTEREPLACECONCATCONCATENATETEXTJOIN
情報ISTEXTISNONTEXTISNAISLOGICALISEVENISODD
日本語向けJISASCDBCS、簡易版の 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 以降は商用版として提供しています。最新のアセンブリは、カスタマーポータルにサインインしてダウンロードできます。

既存プロジェクトでは、参照しているアセンブリをダウンロードしたバージョンに置き換えたうえで、起動時に ReoGridLicense.SetLicense(string) を呼び出すようコードを追加してください。


おわりに

ReoGrid 4.5 は、数式の表現力と操作性の強化、そして大規模 Excel ファイルの読み込み性能・メモリの改善に焦点を当てたリリースです。

Excel に近い数式機能をアプリ上でそのまま提供したい場合や、大きなブックの読み込みに時間がかかっていた場合は、ぜひ 4.5 でお試しください。


関連リンク