V5 のコアは UI に依存しません。unvell.ReoGrid.One.Core は net10.0 を対象とし、
依存パッケージがなく、Windows / Linux / macOS のいずれでも動作します。
V4 ではモデルがコントロールと密結合していたため、サーバー側での利用は現実的ではありませんでした。 V5 で分離されたのはこの用途を成立させるためです。
何ができるか
.Core パッケージに含まれるもの:
Workbook/Worksheet(ストレージ・スタイル・結合・罫線・リッチテキスト)- 数式エンジン(122 関数・依存関係にもとづく再計算・クロスシート参照・定義名)
- 条件付き書式
- I/O — reogrid-json・CSV・XLSX・PDF
- 改ページ・印刷レイアウトの計算
含まれないもの: 画面表示・マウス/キーボード操作・セルエディタ(これらは UI パッケージ側)。
XLSX を読んで PDF にする
using unvell.ReoGrid.Core;
using unvell.ReoGrid.IO.Excel;
using unvell.ReoGrid.IO.Pdf;
var workbook = XlsxReader.Read("input.xlsx");
// Excel が保存したキャッシュ値をそのまま読み込むため、ロード時に再評価はしない。
// 値を差し替えたときだけ再計算する。
var sheet = workbook[0];
sheet.SetNumber(1, 1, 500);
sheet.Recalculate();
PdfExporter.Export(workbook, "output.pdf");
PDF には日本語フォント(IPAexGothic)が埋め込まれるため、サーバーにフォントを インストールしていなくても日本語が出力されます。
ゼロから作って XLSX で書き出す
using unvell.ReoGrid.Core;
using unvell.ReoGrid.Core.Style;
using unvell.ReoGrid.IO.Excel;
var workbook = new Workbook();
var sheet = workbook.AddWorksheet("売上");
sheet.SetText(0, 0, "月");
sheet.SetText(0, 1, "金額");
sheet.SetRowStyle(0, new StyleRecord { Bold = true });
for (int i = 0; i < 12; i++)
{
sheet.SetText(i + 1, 0, $"{i + 1}月");
sheet.SetNumber(i + 1, 1, 1000 * (i + 1));
}
sheet.SetText(13, 0, "合計");
sheet.SetFormula(13, 1, "SUM(B2:B13)");
sheet.SetNumberFormat(new RangePosition(1, 1, 13, 1), "#,##0");
XlsxWriter.Write(workbook, "sales.xlsx");
大きな XLSX を部分的に読む
シート全体をメモリに載せずに扱う場合は OpenVirtual を使います。
using var virtualBook = XlsxReader.OpenVirtual("large.xlsx", SheetLoadMode.OnDemand);
読み込みは XmlReader によるストリーミングで、メモリ使用量は実在するセル数に比例します
(シートの宣言上の寸法ではありません)。
CSV と JSON
using unvell.ReoGrid.Core.IO;
// CSV(RFC 4180)
CsvIO.Read(sheet, File.ReadAllText("data.csv"));
File.WriteAllText("out.csv", CsvIO.Write(sheet));
// reogrid-json — Web 版(reogrid-web)と相互運用できる形式
string json = ReoGridJsonIO.Write(workbook, pretty: true);
var restored = ReoGridJsonIO.Read(json);
ライセンス
ヘッドレスでも ライセンスキー の適用対象です。 未適用の場合、PDF 出力に透かしが入り、XLSX には通知シートが追加されます。 出力自体は行われるため、評価はそのまま進められます。
using unvell.ReoGrid.Core.License;
ReoGridLicense.SetLicense(Environment.GetEnvironmentVariable("REOGRID_LICENSE")!);