Formatting preserved
Number formats, conditional formatting, merged cells, column widths and print areas render as laid out — not as a bare HTML table that lost the point of the design.
A workbook is rarely just what is on screen. It carries hidden sheets, filtered rows, comments, defined names and whatever somebody parked in column BX. Rendering server-side means the reader sees the report and not the archaeology underneath it.
The problem
Spreadsheets are the format most likely to leak something. Hidden sheets holding source data, filtered rows that unfilter, a pivot cache containing the full table, comments from a negotiation nobody meant to publish.
Converting to PDF first solves the leak and creates a chore: someone has to run the conversion, and the PDF is stale the moment the workbook changes.
Rendering the live workbook server-side gets both. The reader sees current data, formatted as the author intended, and receives an image rather than a file with a basement.
Capabilities
Number formats, conditional formatting, merged cells, column widths and print areas render as laid out — not as a bare HTML table that lost the point of the design.
Charts render alongside their data rather than disappearing, which is usually the first thing that breaks in a naive conversion.
.xls, .xlsx, .xlsm, .xlsb, .xltx, .xltm, .ods and .csv, all through the same open call.
Output follows the workbook's page setup, so a report designed to print on four pages reads as four pages instead of one endless scroll.
With the AdvancedSearch plugin, cell text is searchable across the rendered document.
Evaluation happens server-side. The client never receives formulas, defined names or the dependency graph that would let someone reconstruct your model.
Integration
Because the viewer is driven by page setup, a workbook with sensible print areas renders far better than one that has never been printed. It is worth checking that before blaming the renderer.
Supported extensions
// Same call, different family
string token = await viewer.OpenDocumentAsync("wwwroot/files/Q3-Report.xlsx");
// CSV goes through the same path — useful for data exports
// that users want to read rather than download
string csvToken = await viewer.OpenDocumentAsync("wwwroot/exports/ledger.csv");Details
Rendering reflects the workbook's stored values and formatting. What the client receives is an image of the sheet, never the formulas or the dependency graph behind it.
They are not part of what gets rendered to the reader, which is the main reason teams prefer this to emailing the file. The workbook keeps its structure on your server; the browser gets pages.
Yes, though the result follows the page setup. A sheet that has never had a print area defined will paginate awkwardly for the same reason it prints awkwardly.
Word
Native DOC/DOCX/RTF/ODT rendering with no Office install, no COM interop and no server-side automation.
WordServer-side PDF rendering into page images — the user reads the document without ever receiving the file.
PDFA temporary licence takes a few minutes to request and runs entirely on your own machine. The files that matter are the ones already breaking your current viewer.