Excel to Chart

Drop an xlsx, xls or xlsm workbook and a chart appears. The file is parsed in your browser, the first sheet that actually holds data is charted, and the panel tells you which sheet that was. From there it is the same tool as the CSV page: seven shapes, the same controls, the same PNG, SVG and chart-data exports.

No workbook to hand? The sample data here is a CSV, so try the sample on csv-to-chart · same engine, same controls.

Need to clean the sheet first? Open the app

How the workbook gets read

The file is taken as bytes and handed to SheetJS, which unpacks the workbook inside your tab. Dates are asked for as real date objects rather than the serial numbers Excel stores underneath, which is why a column of order dates arrives here as dates and produces a time axis instead of a column of five-digit integers. The library loads only when a workbook is actually dropped, so the page itself stays small for anyone who arrived by accident.

Then a sheet has to be chosen, and choosing the first one is a worse idea than it sounds. Real workbooks open with a cover page, a README tab, a parameters sheet or a blank scratch area, and charting whatever happens to be at index zero produces an empty panel a surprising fraction of the time. So the sheets are walked in order and the first one holding actual rows wins. The panel then prints a note next to the chart naming the sheet it used and saying how many sheets the workbook contains: Charting the sheet "Q3 detail". The workbook has 6 sheets. That sentence exists because a chart drawn from the wrong tab is the most expensive kind of quiet mistake, and a tool that picks for you owes you the sentence.

The chosen sheet is converted to a rectangle of rows and columns, and from that point on nothing about this page is Excel-specific. The same column role inference runs, the same default chart is chosen, the same aggregation happens, and the same renderer draws it. A workbook and a CSV holding identical numbers produce a pixel-identical chart, which is a deliberate property rather than a coincidence.

Seven shapes, the same controls

Once the sheet is a rectangle, everything redraws from parsed rows, so switching shape never re-reads the workbook.

  • Chart. Bar, column, line, area, donut, scatter, histogram and boxplot. Bar lays categories down the left with the value written beside each one. Line and area are for movement over time. Donut is parts of a whole. Scatter takes a second measure and reports the correlation. Histogram bins one measure and boxplot shows its spread with outliers drawn individually.
  • Measure. The column being aggregated, or Count rows when the count itself is the answer.
  • Dimension. The column being grouped by. A date column turns the chart into a time series; a category turns it into a breakdown.
  • Y measure. Appears only for scatter, and holds the vertical measure.
  • Aggregate. Sum, average, count, count distinct, minimum, maximum, median. Median is the one spreadsheets make awkward and the one you want whenever a few enormous rows are dragging the mean somewhere unreal.
  • Show and Sort. Top 5 through everything, ordered by value, by label, or left in sheet order.
  • Time grain. Auto, day, week, month, quarter, year. Auto reads the span of the column and states its choice in the caption.

Worked example: a six-sheet sales workbook

A workbook with tabs named Cover, Assumptions, Orders, Returns, Pivot and Notes. The Cover tab holds a logo and a date. Assumptions is empty this quarter. Orders is the real sheet, and reads like this:

       A            B         C            D        E
1   date         region    product      units    revenue
2   2024-01-02   West      Doohickey       58    12275.12
3   2024-01-04   West      Sprocket        13      529.49
4   2024-01-06   North     Widget          41     3908.60
5   2024-01-08   East      Gizmo            7     1204.15

Cover has content, so it is not skipped for being empty, but it has no rectangular data and yields nothing chartable. Assumptions is genuinely empty and is skipped. Orders wins. The panel draws a line chart titled revenue over time with a caption reading Sum of revenue · monthly totals · 6 points, a TREND kicker in the corner, and a note beside it reading Charting the sheet "Orders". The workbook has 6 sheets. A second note under the summary strip reads 312 rows x 5 columns read · Charted in this tab. Nothing was uploaded.

Switch Chart to Bar and Dimension to region. The title becomes revenue by region, the kicker becomes BREAKDOWN, and four horizontal bars appear with the region name in grey to the left and the value in mono to the right: $412.7k, $338.1k, and so on. There is no value axis, because with the numbers on the bars an axis is furniture.

Note what did not happen. The Pivot tab was ignored entirely, including the pivot table on it. Any chart objects sitting on Orders were ignored too. Column E was stored as a formula in the original model and charted as the value Excel last saved, not as a recalculation. And Download chart data returns six rows of month and total, which is the honest audit trail for the picture above it.

The four things about spreadsheets that trip this up

A workbook is a document that happens to contain a table, whereas a CSV is a table and nothing else. That difference is the source of nearly every surprise on this page, and it deserves an honest paragraph rather than a footnote.

Merged cells. Excel stores a merged range as one populated cell plus a run of empties. A title merged across A1 to F1 therefore reads as one header and five blanks, which is why a beautifully formatted sheet lands here with columns named Column2 onward. Visually the merge implies a label spanning six columns; structurally the label is in one of them. Unmerge before saving, or promote a proper header row in the app.

Formulas. The file stores both the formula and its last computed value, and the value is what gets charted. That is right in nearly every case and wrong in exactly one: a workbook saved with calculation set to manual holds stale values, and this page will faithfully chart the stale ones. Recalculate and save before dropping it if the model has been edited recently.

Multiple header rows. Row one is the header, everything under it is data. A second header row arrives as a data row full of text, which on a numeric column is excluded from the arithmetic and counted in a note, so the totals stay correct even though the row is noise. The chart is still not what you wanted, so flatten the headers into one row first.

Charts already in the workbook. They are not read and cannot be. Only cell values come across, along with nothing at all of the pivot tables, slicers, conditional formats, cell colors, comments or macros. If the workbook already has the chart you want, point this page at the range behind it and rebuild it here in a few clicks. The payoff is a real SVG export and a picture that looks the same on every machine.

Four exports

  • Download PNG. Two-times density, drawn on the panel background rather than a transparent one, so it does not turn into a black rectangle on a dark slide.
  • Copy image. The identical PNG on your clipboard, which is the fastest route into a document or a chat message.
  • Download SVG. Rendered again as vectors. Real paths, real text, sharp at any size, editable in Illustrator, Figma or Inkscape. This is the one Excel does not give you, and it is the reason a lot of people end up here with a workbook they could have charted in Excel.
  • Download chart data. The aggregated numbers as CSV, one row per bar, point or slice.

If what you need is the sheet itself as a plain table rather than a picture, excel-to-csv does that conversion, and the workbook viewer opens every sheet without converting anything.

What this page will not do

  • No sheet picker on the page itself. The first sheet holding data is charted, and the note says which. To chart a different tab, extract it with excel-to-csv or open the workbook in the app.
  • No paste tab. A workbook is binary and there is nothing to paste. Copy a range and use the paste box on csv-to-chart instead.
  • No formula recalculation. Stored values only.
  • No formatting is read. Cell colors, number formats, conditional rules and column widths are all invisible here. A cell showing 45% because of a format is charted as 0.45.
  • Macros never run. An xlsm is read as data and its VBA is ignored, which is the only defensible behavior for a web page.
  • One chart at a time. For a KPI strip and a grid of panels from one workbook, use the dashboard builder.
  • Other spreadsheet formats need converting. Numbers, ODS and Google Sheets have to be exported to xlsx or CSV first.

Frequently Asked Questions

Which sheet gets charted?

The first one that actually contains data. Workbooks routinely open with a cover tab, an instructions tab or an empty scratch sheet, so charting sheet index zero without looking would produce an empty panel more often than you would like. Each sheet is checked in order and the first with real rows in it is used. The panel then states which sheet it chose and how many sheets the workbook has, in a note beside the chart, so you never have to guess whether the picture came from the tab you meant.

Is my workbook uploaded to a server?

No. The file is read as an array buffer in the page and parsed by SheetJS, which is a JavaScript library running inside your tab. There is no upload endpoint behind this page and no request that carries your cells. Everything after that, the aggregation and the drawing and the image export, is the same browser code. Close the tab and it is gone. This is the practical reason people use this page for a salary sheet or a client model, and it is also why it keeps working once loaded with the network switched off.

Are my formulas recalculated?

No, and this is worth understanding. An xlsx file stores both the formula and the value Excel last computed for it, and the reader takes the value. So a cell holding =SUM(B2:B40) charts as the number Excel put there when the file was last saved. That is right almost all of the time and wrong in one specific case: a workbook saved with calculation set to manual, where the stored values are stale relative to the formulas. If a number in the chart disagrees with what you expect, open the workbook, force a recalculation, save, and drop it again.

What happens to merged cells?

A merged range holds its value in the top-left cell and leaves the rest of the range empty, and that is exactly how it is read here. A merged title spanning A1 to F1 therefore becomes one populated column header and five blank ones, which is usually why a workbook that looks tidy in Excel produces columns named Column2 through Column6. Unmerge before charting, or move the real header onto its own single row. Merged cells inside the data body are more troublesome still, because the repeated label a human infers visually simply is not in the file.

My workbook has two header rows. What now?

The first row is taken as the header and every row below it is data, so a second header row arrives as a data row full of text. On a numeric column that text is not a number, so it is excluded from the total and counted in a note under the chart, which means the arithmetic stays right even though the row is noise. The chart is still not what you wanted, though. Flatten the two header rows into one, either in Excel before saving or in the app, where you can promote a row to become the header.

Can this page read the charts already in my workbook?

No. Embedded charts, pivot tables, slicers, conditional formatting, cell colors, comments and macros are all ignored. Only the cell values are read. If you have already built a chart in Excel and want the same thing here, point this page at the range that chart was drawn from and rebuild it with the controls, which takes about as long as reading this answer. What you get in exchange is an SVG export and a chart that renders the same way for everyone who opens it.

Does xls work, or only xlsx?

The drop zone accepts xlsx, xls and xlsm. The modern xlsx format is a zipped XML package and reads most reliably. The older binary xls format from Excel 2003 and earlier is supported and is generally fine, though very old or unusual files occasionally lose formatting details, which does not matter here because only values are used. An xlsm file is an xlsx with macros in it, and the macros are simply not executed, which is the correct and safe behavior for a web page. Numbers and Google Sheets files need exporting to xlsx or CSV first.

Why is there no paste box on this page?

Because a workbook is a binary file and there is nothing meaningful to paste. Copying a block of cells out of Excel puts tab-separated text on your clipboard, not a workbook, so the paste tab belongs on the CSV page instead, where it works perfectly. If a range of cells is all you need charted, copy it and use the paste tab on csv-to-chart. That is genuinely faster than saving a whole workbook just to chart forty rows of it.

Chart the workbook

Drop the xlsx, check the sheet note, take the SVG. No sign-up, no upload, no row cap.

Back to the chart maker