RDLL.excelcannon.sdk
0.14.0
dotnet add package RDLL.excelcannon.sdk --version 0.14.0
NuGet\Install-Package RDLL.excelcannon.sdk -Version 0.14.0
<PackageReference Include="RDLL.excelcannon.sdk" Version="0.14.0" />
<PackageVersion Include="RDLL.excelcannon.sdk" Version="0.14.0" />
<PackageReference Include="RDLL.excelcannon.sdk" />
paket add RDLL.excelcannon.sdk --version 0.14.0
#r "nuget: RDLL.excelcannon.sdk, 0.14.0"
#:package RDLL.excelcannon.sdk@0.14.0
#addin nuget:?package=RDLL.excelcannon.sdk&version=0.14.0
#tool nuget:?package=RDLL.excelcannon.sdk&version=0.14.0
RDLL.excelcannon.sdk
ExcelCannon in process: extract an Excel workbook (.xlsx, .xlsm, .xlsb) into the canonical
JSON model, render it as compact text for a prompt, diff two models, migrate a mapping across
template generations, and lint a model, all without a child process.
This version runs a pure managed engine: no native library, every OS and architecture .NET 10
runs on, trimming and Native AOT compatible, and no package dependencies. The public surface is the
same as the earlier native-engine SDK, type for type and member for member, so existing code
compiles unchanged. The JSON it returns is byte-identical to excelcannon extract / diff --json
/ lint --json / migrate --json.
using RDLL.ExcelCannon.Sdk;
ModelResult model = ExcelCannon.Extract("quarterly.xlsx", ExtractMode.Data);
Console.WriteLine($"{model.Kind} v{model.SchemaVersion}: {string.Join(", ", model.SheetNames)}");
Console.WriteLine(ExcelCannon.Render(model.Json, ExtractMode.Data));
DiffResult diff = ExcelCannon.Diff(
ExcelCannon.Extract("golden.xlsx", ExtractMode.Data).Json,
ExcelCannon.Extract("filled.xlsx", ExtractMode.Data).Json);
Console.WriteLine($"{diff.OverallPct:F1}% match, {diff.FindingCount} differences");
What this version adds:
ModelResult.Workbook: the typed model (RDLL.ExcelCannon.Model.Workbook), andRender/Diff/Migrate/Lintoverloads that take it with no JSON round trip.Extract(Stream, fileName)andExtract(ReadOnlyMemory<byte>, fileName)(abyte[]converts).CancellationTokenon the new overloads, observed between phases, before each sheet and during a URL download.- Lazy JSON:
Jsonis produced on first read;WriteJson(Stream)andWriteJsonTo(IBufferWriter<byte>)stream UTF-8 without building a string. ITypedExcelCannon, the injectable seam for all of the above.
Dependency injection: services.AddExcelCannon(options => ...) is compiled into your project
automatically when it already references Microsoft.Extensions.DependencyInjection.Abstractions
(every ASP.NET Core and worker host does). Otherwise, register it in one line:
services.AddSingleton<IExcelCannon, ExcelCannonClient>().
Everything is thread-safe. The full guide, including the error table and a migration checklist,
is docs/sdk.md in the repository.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.14.0 | 0 | 10/8/2026 |
| 0.13.1 | 84 | 10/3/2026 |
| 0.13.0 | 93 | 9/28/2026 |
| 0.12.0 | 2,357 | 9/1/2026 |
| 0.11.0 | 107 | 9/1/2026 |
| 0.10.0 | 101 | 9/1/2026 |
| 0.9.0 | 538 | 8/31/2026 |
| 0.8.0 | 99 | 8/31/2026 |
| 0.7.2 | 100 | 8/31/2026 |
| 0.7.1 | 186 | 8/12/2026 |
| 0.7.0 | 112 | 8/11/2026 |
| 0.6.2 | 100 | 8/11/2026 |
| 0.6.1 | 91 | 8/10/2026 |
| 0.6.0 | 102 | 8/10/2026 |
| 0.5.2 | 94 | 8/10/2026 |
| 0.5.1 | 104 | 8/10/2026 |
| 0.5.0 | 104 | 8/10/2026 |
| 0.4.0 | 108 | 8/9/2026 |
| 0.3.0 | 103 | 8/9/2026 |
| 0.2.0 | 111 | 8/9/2026 |