Excel to PDF

Turn the sheets of a workbook into a clean, selectable PDF table — entirely in your browser.

Other file types are refused by the picker itself, so nothing happens when you choose one.

About Excel to PDF

Drop in a workbook, choose which sheets matter, and download a PDF in which each of those sheets is drawn as a proper table. The output is vector text, so it stays selectable and searchable, prints crisply and is a fraction of the size of a screenshot. Everything — reading the file, laying out the tables, writing the PDF — happens inside this browser tab.

Values, not appearance

This is the single thing to understand before you use it. A spreadsheet file holds two very different kinds of information: the data, and the way that data is presented. Only the data is read here. Each sheet is turned into a plain grid of displayed values and then redrawn in a consistent house style — a blue header band, hairline rules, alternating row shading. Cell fills, font choices, borders, conditional formatting, column widths, frozen panes, charts, pictures, shapes, comments and data validation are not carried over, because none of them are part of the value grid.

Formulas are read as the result they last calculated to, which is stored alongside the formula in the file. That is the correct behaviour for a printed document, but it makes the output only as fresh as the last recalculation — a workbook saved with calculation set to manual can print numbers that no longer match its own inputs. Where that stored result is an error, the error is what prints: #N/A, #REF!, #DIV/0! and the rest appear in the table as themselves, because a broken figure that arrives as an empty cell is worse than one that arrives loudly. Merged cells flatten in the same way they do in every value-level export: the value sits in the top-left cell of the merge and the covered cells arrive empty.

Which cells count as the sheet is worked out from the cells the file actually contains rather than from the used range recorded in it, because that record is unreliable in both directions — some exporters write a placeholder that would have a full sheet read as a single cell, and a sheet that has had rows or columns deleted keeps a range far larger than anything left in it. Tabs the workbook has hidden are listed and marked but not ticked; hidden rows and columns inside a visible sheet are part of its value grid and are printed.

How the page is laid out

  • One sheet per section. Each selected sheet starts on a new page. Unless you untick it, the sheet name is printed above the table as a heading, with its row and column count underneath.
  • Header rows repeat. When the first row is treated as a header it is redrawn at the top of every page a long table continues onto, so a fifty-page export stays readable.
  • Cells wrap, they do not clip. A long value breaks onto extra lines inside its own column and the row grows taller. Nothing is silently cut off, except cells over 500 characters, which get an ellipsis.
  • The empty edges go. Blank rows above and below the data, and columns that are blank from top to bottom on either side of it, are dropped before layout — a used range is often far larger than the data in it. Blanks that sit between rows or columns of data are kept and printed, so the row count you see matches the table; a run of more than two consecutive blanks is shortened to two, because one stray value ten thousand rows below the table would otherwise become hundreds of pages of empty rulings, and one far to the right would squeeze the real columns into hairlines.
  • Orientation can pick itself. On Auto, any selection containing a sheet wider than six columns switches the whole document to landscape.
  • Page numbers. A centred n / total footer is added to every page after layout finishes.

The character-set limit, stated plainly

No font file is embedded in the output. Text is drawn with Helvetica, one of the fourteen fonts every PDF reader already has, and those fonts are encoded with Windows-1252. Latin script and its accents, curly quotes, en and em dashes, the euro and pound signs and the trademark symbol all work. Cyrillic, Greek, Hebrew, Arabic, CJK, Indic scripts, emoji and most mathematical or dingbat symbols do not, and each such character is swapped for a question mark with the total reported after conversion rather than being allowed to corrupt the surrounding text. If your data is in one of those scripts, print to PDF from Excel or LibreOffice, which can embed the font it needs.

When another tool is the right one

Use the spreadsheet application's own print-to-PDF when the design of the sheet is the deliverable — an invoice, a formatted report, anything with charts. Use Excel to CSV when the destination is another system rather than a reader. Use CSV to Excel to go the other way. To pull a table back out of a PDF, PDF to Excel reconstructs rows from text coordinates. Once you have the PDF, Merge PDF will bind it to a cover letter, Add Page Numbers to PDF will renumber a combined document, and Protect PDF will put a password on it before it goes out.

Every sheet, or just the ones you pick

The workbook is opened and each tab listed with its row and column count. Tick the sheets you want; each selected sheet starts on a fresh page as its own table. Tabs the workbook has hidden are marked and left unticked, so a lookup sheet does not walk into a document you are about to send.

Real table rulings, not a screenshot

Rows are drawn with jsPDF-AutoTable as vector text and lines, so the PDF stays selectable, searchable and sharp at any zoom. Long cells wrap inside their column and tall tables continue onto the next page with the header repeated.

The workbook never leaves the tab

Parsing and PDF generation both run in this browser with the File API. Budgets, payroll and pricing sheets are exactly the files that should not be posted to a converter, and here there is no upload step at all.

Frequently Asked Questions

Do my formulas come across?

Not as formulas — as the value each one last calculated to. A workbook stores both the formula and its cached result, and it is the cached result that is read and printed. That is almost always what you want in a PDF, but it has one sharp edge: the number comes from the file rather than from a fresh recalculation, so a workbook saved with automatic calculation switched off, or one whose external links were never refreshed, will print stale figures. Open it, force a recalculation, save, then convert. A formula whose result is an error prints that error — #N/A, #REF!, #DIV/0!, #VALUE!, #NAME?, #NUM!, #NULL! and the newer #SPILL! and #CALC! all appear as themselves, because a blank in their place would read as "nothing here" rather than "this figure is broken". A formula that was never calculated at all has no cached result to print and does come through blank.

Why does the PDF not look like my spreadsheet?

Because nothing about the presentation layer is read. Fills, font colours, borders, conditional formatting, column widths, frozen panes, charts, images, shapes, comments and data validation are all ignored. Number formats are read only for the text they produce — £1,234.50 keeps its symbol and separators — never for the colour or alignment they carry. What is read is the grid of values, and what is drawn is a clean table with a coloured header row and alternating row shading. If the visual design of the sheet is the point — a formatted invoice, a dashboard, a certificate — do not use this; print to PDF from Excel, LibreOffice Calc or Google Sheets instead, because only those know the layout.

What happens to merged cells?

They flatten. A merged region stores its value in the top-left cell only, and the covered cells are genuinely empty in the file, so the value lands in the first column of the merge and the rest of the row comes through blank. A merged title spanning A1:F1 therefore prints as one value followed by five empty cells — assuming the table below it uses those columns, which is the usual case. If nothing else in the sheet reaches column F, the empty columns are trimmed away with the rest of the oversized used range and the title simply sits alone. It is worth unmerging header rows before converting, otherwise your column headings can end up one row lower than the table expects.

How are dates, currency and percentages printed?

As the text the spreadsheet displays, not as the underlying serial number — a date shown as 15/03/2024 prints as 15/03/2024, and a cell showing £1,234.50 prints with the symbol and separators. The advantage is that the PDF reads exactly like the sheet. The consequence is that the output inherits whatever locale the workbook was authored in, including day-first or month-first ordering, so a PDF meant for an international audience is easier to read if you switch the date columns to an unambiguous format first.

Some characters came out as question marks.

The PDF is built with the standard Helvetica font, which covers the Latin-1 / Windows-1252 character set: English, Western European accents, curly quotes, dashes, the euro sign, and the symbols that live in Latin-1 such as ° ± µ × ÷ ¼ ½ ¾. Anything outside that — Cyrillic, Greek, Hebrew, Arabic, Chinese, Japanese, Korean, Devanagari, Thai, emoji, tick marks, and mathematical symbols like Δ Ω π ∑ — has no glyph available, so each such character is replaced with a question mark and the total is reported after conversion. Invisible control characters left behind by some exports are replaced too, and counted in the same total. If a cell was also cut at 500 characters, only the replacements that survived the cut are counted. Note that ticking "Print the sheet name above each table" puts the sheet names through the same conversion, so the total can rise slightly. No font file is embedded, which is what keeps the output small and the conversion instant. For a workbook in a non-Latin script, print to PDF from the spreadsheet application, which can embed the right font.

My table is too wide for the page.

Switch the orientation to landscape, which is picked automatically when any selected sheet has more than six columns, and drop the text size to Compact. The column count that triggers that is counted from real data: columns that are empty from top to bottom are trimmed off the edges of the grid first, so a sheet whose file claims a hundred columns but only fills three is treated as three. Beyond roughly twenty genuine columns even landscape A4 runs out of room and the columns become unreadably narrow — AutoTable will keep shrinking them rather than clipping the data, so nothing is lost, but the result stops being useful. Split a very wide sheet into two ranges, or convert to CSV and print from there.

What counts as the header row?

The first row of each sheet that contains anything. Blank rows at the very top of a sheet are dropped before the table is laid out, so a spacer above your column names does not push the header out of position — but a title line does, because it is real content. If your sheet starts with a title rather than column names, untick "Treat the first row of each sheet as a header" and every row is printed as a body row instead. There is no support for multi-row headers; a two-line heading will have its first line styled as the header and its second printed as ordinary data.

Are hidden sheets included?

They are listed, marked "hidden", and left unticked. A hidden tab is usually a lookup table, a working column or last quarter's figures, and quietly printing it into a document you are about to email to somebody is the wrong default. Tick it and it converts exactly like any other sheet. This reads the workbook's own hidden flag, so it covers both ordinary hiding and the "very hidden" state set from the VBA editor. It says nothing about hidden rows and columns inside a visible sheet — those are part of the value grid and are printed.

Which file types can I drop in?

The picker accepts .xlsx, .xlsm, .xlsb, the older binary .xls, OpenDocument .ods, and plain .csv — anything else it simply will not take, so if clicking a file appears to do nothing, that is why. What the file actually contains matters more than what it is called: the first bytes decide whether it is treated as a ZIP-based workbook, an old binary workbook, or delimited text, so a CSV that someone saved as .xlsx is still read correctly and still decoded as UTF-8 or UTF-16 rather than mangled. Macros in an .xlsm or .xlsb are ignored — only the stored values are read, which is the only sensible behaviour for a PDF. A password-protected workbook cannot be opened at all and will report an error; remove the password in Excel first.

Are there limits on size?

The whole workbook is read into memory, converted to an array of rows and then laid out, so peak memory runs to several times the file size and everything happens on the main thread. A few thousand rows convert in a second or two. Tens of thousands of rows will produce a very large PDF and can make the tab unresponsive while it draws, so convert in slices if you are dealing with an export that size. Individual cells longer than 500 characters are truncated with an ellipsis, because a single cell taller than the page has nowhere to go.

Is anything uploaded?

Your workbook is not. It is read from your disk by the browser, parsed by a JavaScript library in this tab, and the finished PDF is handed straight to your downloads folder — no request carries any part of it, nothing is queued on a server and there is no copy to delete afterwards. To be exact rather than merely reassuring: the page itself loads analytics and advertising scripts like most of the web, and those make requests of their own. Nothing from your file is in them, and you can confirm all of this by opening the network panel or simply going offline — the converter keeps working with no connection at all.