DHI.Services.OpenXML for Spreadsheets — Internal Developer Guide (Summary)¶
Storage provider for spreadsheets on disk using the Open XML SDK. For full details see the OpenXML Provider Guide.
When to use¶
- You want simple, durable
.xlsxfiles on disk as your backing store. - You need to read cells/ranges/used range/named ranges and write new workbooks.
- You want to download the raw file via the Web API.
ID & group model¶
- ID: relative path including
.xlsx(e.g.,/reports/finance.xlsx). - Group: subfolder (e.g.,
/reports→<root>/reports/).GetByGroupis recursive.
Common calls¶
// Create
var wb = new Spreadsheet<string>("/reports/finance.xlsx", "finance.xlsx", "/reports");
wb.Data = new List<object[,]> { new object[,] { { "A", 1 }, { "B", 2 } } };
wb.Metadata["SheetNames"] = new List<string> { "Summary" };
service.Add(wb);
// Read
var cell = service.GetCellValue("/reports/finance.xlsx", "Summary", new Cell(0,1)).Value;
var used = service.GetUsedRange("/reports/finance.xlsx", "Summary").Value;
var fmts = service.GetUsedRangeFormats("/reports/finance.xlsx", "Summary").Value;
// List & delete
var all = service.GetAll();
var inGroup = service.GetByGroup("/reports");
service.Remove("/reports/finance.xlsx");
// Stream
var (ms, type, name) = service.GetStream("/reports/finance.xlsx");
Helpers (direct write):
var ds = new DataSet();
// ... fill DataTables ...
ds.SaveAsXlsx(Path.Combine(root, "quick/orders.xlsx"), includeFieldNames:true);
"Finance:Q1/2025".AsValidSheetName("_"); // safe worksheet name
Notes¶
.xlsxonly (IDs must include the extension).- Sheet names are case-insensitive in lookups.
- Values are typed (
bool,int,double,DateTime, orstring) based on Excel number formats (built-ins 14–22, 45–47, 49, etc.). GetUsedRangetrims trailing empty rows/columns.- Files are read with
FileShare.ReadWrite.
Web API example¶
"openxml-sps": {
"$type": "DHI.Services.Spreadsheets.WebApi.SpreadsheetServiceConnection, DHI.Services.Spreadsheets.WebApi",
"ConnectionString": "[AppData]",
"RepositoryType": "DHI.Services.Provider.OpenXML.SpreadsheetRepository, DHI.Services.Provider.OpenXML",
"Name": "OpenXML spreadsheets",
"Id": "openxml-sps"
}