Excel to PDF Converter: Convert Spreadsheets Free Online

📄 File and Document Free Forever

Excel to PDF Converter

Turn an .xlsx, .xls, or .csv file into a clean, paginated PDF. Choose which sheets to include, each starts on its own page, with adjustable font size and page orientation. Runs entirely in your browser.

1 · Upload Spreadsheet
📊

Click or drop an Excel file

XLSX, XLS, XLSM, CSV, ODS · processed on your device, never uploaded

3 · PDF Options

Note: PDF output uses a standard Latin font. Complex scripts (Hindi, Arabic, CJK) may not render correctly.

About This Tool

How this tool turns spreadsheet rows into a paginated PDF table

Converting a spreadsheet to PDF is not a screenshot of Excel. This tool reads your workbook’s actual cell data with SheetJS, then rebuilds it as a genuine vector PDF table using jsPDF and its autoTable plugin, deciding page breaks, column widths and header repetition on its own. Everything runs in your browser. The workbook is parsed locally and the PDF is generated locally, with no upload step anywhere in the code.

From workbook to paginated document

Step 1 Parse the workbook The file is read with file.arrayBuffer() and handed to XLSX.read(), producing a workbook object with one entry per sheet. Each sheet’s row count is computed by decoding its !ref range string.
Step 2 Choose sheets and strip empty rows You pick which sheets to include with checkboxes. Each selected sheet becomes an array of arrays via sheet_to_json(ws, { header: 1 }), then any fully empty trailing rows are popped off before rendering.
Step 3 Auto-detect orientation On the automatic setting, the tool scans every selected sheet for its widest row. More than 6 columns switches the whole document to landscape so a wide table is not crushed into a narrow portrait page.
Step 4 Render with autoTable jsPDF’s autoTable plugin draws the header row, body rows, gridlines and striping, adds a new PDF page per sheet, and stamps a page number in the footer through a didDrawPage callback.
// document assembly, simplified from the tool source var doc = new jspdf.jsPDF({ orientation: orientation, unit: ‘mm’, format: pageSize }); names.forEach(function (nm, idx) { var aoa = sheetToAoa(wb.Sheets[nm]); if (!first) doc.addPage(pageSize, orientation); doc.autoTable({ body: hasHeader ? aoa.slice(1) : aoa, head: hasHeader ? [aoa[0]] : undefined, headStyles: { fillColor: [219, 39, 119], textColor: 255 } }); }); doc.save(name + ‘.pdf’);

Notice the header fill color is the literal RGB triple [219, 39, 119], a rose pink, hardcoded into the autoTable call. It is applied whenever “Show sheet titles” styling is on, and the same value colors the sheet name text drawn above each table.

Layout options and what each one changes

OptionEffect
Page sizePassed straight to jsPDF’s format, accepts A4, Letter and similar named sizes
OrientationPortrait, landscape, or automatic based on the widest row’s column count
Font sizeSets autoTable’s styles.fontSize, affecting how much text fits per cell before wrapping
ThemeGrid draws full borders, striped alternates row shading, plain removes border lines entirely
Header rowWhen on, treats the sheet’s first row as a repeating table header instead of a normal data row
Sheet titlesDraws the sheet name as a heading above its table using doc.text()
Long text wraps, it does not shrink to fit. autoTable’s overflow: 'linebreak' setting means a cell with more text than its column width can hold wraps onto additional lines within that row rather than shrinking the font or truncating. A spreadsheet with one very long text cell in an otherwise compact table can end up with unexpectedly tall rows on the PDF page.

What carries over and what does not

Multi-sheet handling

Each checked sheet becomes its own PDF page, or its own run of pages if the content overflows one page. Unchecked sheets are skipped entirely, not merged or summarized.

What does not carry over

Cell background colors, conditional formatting, charts, images and formulas are not rendered. Only the computed text values reach the PDF table.

SheetJS parsing jsPDF + autoTable rendering Auto landscape for wide sheets One PDF page per sheet

Layout and PDF references

When a spreadsheet needs to be a document

Turning a finance report into a fixed, unchangeable PDF before sending it externally, printing a product inventory sheet in a paginated, readable layout, archiving a snapshot of a live spreadsheet at a point in time, or sharing a data table with someone who does not have Excel installed but has a PDF reader.

Common Questions

FAQ: Excel to PDF Converter

Wide spreadsheets need either more page width or smaller text. Try landscape orientation first, which is the default, then lower the Table Font Size slider until all your columns fit within the page.

No, only the cell text and values carry over into a plain, bordered grid. Cell background colors, conditional formatting, and charts are not part of what this tool extracts.

Yes. After uploading, every sheet in the workbook appears as a checkbox above the preview. Check only the sheets you want in the PDF, each included sheet starts on its own page.

Yes. .csv files are treated as a single sheet workbook, since a CSV has no concept of multiple sheets, and convert the same way as an .xlsx or .xls file.

No. Both the spreadsheet parsing, SheetJS, and the PDF rendering happen entirely in your browser. Your file never leaves your device.

Privacy Overview

Cookies let this site remember your preferences and show us which tools people actually use. Full detail sits in our Privacy Policy.