XLSX, XLS, and CSV to PDF — one section per sheet, built entirely in your browser
| In your workbook | In the PDF | Notes |
|---|---|---|
| Text, numbers, dates | Yes — as values | Read straight from the cells |
| Formulas | Result only | Prints the last value Excel saved; the formula text never exports |
| Multiple sheets | One section per sheet | Each starts on a fresh page under its sheet name; untick any you don't want |
| Merged cells | Yes | Carried through as spanning table cells |
| Print areas & manual page breaks | No | Content reflows to the chosen page size instead |
| Charts, images, shapes | No | The PDF contains the cell grid only |
| Cell colors, fonts, conditional formatting | No | Output is a plain grid — handy when you want a clean look, not a clone |
| Hidden rows & columns | Included | They contain data, so they print; delete them in Excel first if you don't want them |
Most "free" converters upload your spreadsheet to a server, convert it there, and email the result back. For anything with payroll numbers or customer lists in it, that's a bad trade. This one runs the whole pipeline in the page: SheetJS (the Apache-2.0 spreadsheet parser) reads the workbook from an ArrayBuffer, each sheet is serialized to an HTML table, and html-to-pdfmake plus pdfmake paginate that into a PDF you download directly.
File → XLSX.read → per sheet: sheet_to_html → html-to-pdfmake → pdfmake table with grid lines → section with the sheet name as its heading → pageBreakBefore for every sheet after the first. Wide sheets (more than 14 columns) automatically switch to equal-width columns so nothing runs off the page edge; narrower sheets keep content-proportional column widths.
Take a three-sheet order workbook, spring-orders.xlsx: an Inventory sheet of 24 rows × 6 columns, a Pricing sheet of 12 rows × 4 columns, and a 5 × 2 Notes sheet. Converting all three at the default 9 pt produces a PDF with three sections — Inventory, Pricing, Notes — each starting on its own page, so the file is at least 3 pages before any sheet spills onto a second one.
The Pricing sheet carries the money math. Two line items — 5 widgets at $23.50 and 3 gadgets at $41.20 — work out to $117.50 and $123.60, a $241.10 subtotal. An 8.25% sales tax adds $19.89, bringing the total to $260.99. Those exact figures print, because the converter reads the values Excel cached when the file was last saved; the underlying formulas (B2*C2, SUM(D2:D3)) never appear anywhere in the PDF.
Yes. The file is parsed in your browser with SheetJS and the PDF is built locally with pdfmake. Nothing is uploaded, no server ever sees the file, and it works even if you go offline after the page loads.
Only the result prints. A PDF is a picture of the page, so formulas export as the last value Excel calculated and saved in the file. If a spreadsheet was generated by a script with no cached results, those cells can come out empty — open it in Excel once and re-save to fill them in.
Switch orientation to landscape and drop the font size a notch — that combination fits roughly twice the columns on a page. Sheets wider than 14 columns automatically switch to equal-width columns so no content runs off the edge of the page.
Modern .xlsx workbooks, legacy .xls files, and .csv text exports. Charts, images, and shapes inside a workbook are not exported — the PDF contains the cell grid only.
Yes. Every selected sheet becomes its own section that starts on a fresh page, headed by the sheet name, so a 3-sheet workbook produces at least 3 pages. You can untick sheets you don't want before converting.
No. Excel's print areas, manual page breaks, and print scaling live in workbook print settings that this converter doesn't try to reproduce. Content reflows to the chosen page size instead — that's the honest trade-off for a converter that never uploads your file.