Skip to content
Genom

Open an old Excel 97-2003 workbook

Free, no sign-up, and the file never leaves your computer.

Samplesample.xls
Loading the viewer…
Also opensDrop any of them on the viewer above — the format is recognised from the bytes.

An .xls file is one stream of records — four bytes of header and a payload — with structure implied by order rather than written down.

It is read directly into the same grid the modern format uses. Nothing is converted, and nothing is sent anywhere.

How the format actually works

The workbooks everything else refuses

Excel 97-2003 encrypts a workbook marked “read-only recommended” with a fixed password it knows, then opens it again without ever asking anybody — so the file is technically encrypted while being, in practice, open. Most readers see the encryption flag and refuse. Eight of the real-world workbooks in our corpus are exactly this case. There is also the shared string table, which is written across record boundaries: a string cut in half by the end of a record resumes with an encoding flag of its own, and joining the bytes before reading them produces mojibake from the first boundary onward.

What is supported

Everything below is parsed from the file, not approximated

Read from the bytes the format actually stores, into a model that does not know which generation produced it.

The container and the cells

The OLE2 compound file, the sheet directory that says where every substream begins, and every record family the format has for cells — including the two that pack a run of them into one record, and the RK encoding that stores most numbers in four bytes by keeping the top thirty bits of a double.

Text

The shared string table, read across its record boundaries: a string cut in half by the end of a record resumes with an encoding flag of its own, and joining the bytes before reading it produces mojibake from the first boundary on. Rich text keeps its runs. Excel 5 and 95 have no such table and write their strings as bytes in a code page, taken from the file or, failing that, from the country it was written in.

Formulas

Rendered back from their tokens, which is a stack machine and three exceptions: the attribute token that is SUM, the parentheses Excel stored so that =(A1+A2)*3 comes back as itself, and the offsets in a shared formula — one token stream serving a column of cells, wrapping at the 256 columns a .xls has. References across sheets, across workbooks, to deleted sheets and to defined names.

Formatting

The one flat table of formats the file keeps, resolved through the entry each cell is based on: fonts, fills, borders, alignment, rotation and indent, the workbook’s own colour palette when it replaces the default one, and the hole at font number four that every version of Excel has kept since 1993.

Beyond the grid

Merges, hyperlinks with their targets and tooltips, conditional formatting, data validation, frozen and split panes, print setup and page breaks, outlines, and comments — whose text lives in a different record from the note that places them.

Pictures

The workbook’s Office Art store, the same drawing layer .doc and .ppt use: PNG and JPEG pass through, device-independent bitmaps are wrapped as PNG, and EMF and WMF are translated into SVG. Anchored to the cells they were placed against.

Encrypted workbooks

The RC4 scheme of Excel 97-2003, including the fixed password Excel encrypts a read-only-recommended workbook with and opens without asking anybody. Eight of the corpus’s real-world workbooks are exactly that, and every other reader in a browser refuses them.
Being straight with you

What this does not do

Every renderer has a list like this. Most do not publish it.

  • Charts are read as their substream and skipped rather than drawn, as in the modern format.
  • The Excel 95 exclusive-or obfuscation and the CryptoAPI scheme of Excel 2002 are detected but not decrypted.
  • Excel 4.0 and earlier have no substreams at all and are refused rather than half-read.
  • Pivot tables are not reconstructed; their cached result is what the sheet shows, and that is what is read.

If a file of yours renders wrong, send it to admin@genom.dev. It joins the corpus everything is measured against, which is what makes a fix stay fixed.

Questions

Things people ask

Is my workbook uploaded anywhere?
No. The file is opened by JavaScript running in this tab and is never sent anywhere — there is no upload, no server-side conversion and no copy kept. You can confirm it: open your browser’s network panel, then open a file. Nothing leaves. This also means the page works with no connection at all once it has loaded.
Can it open password-protected .xls files?
It opens the RC4 scheme of Excel 97-2003, including the fixed-password case described above. The Excel 95 exclusive-or obfuscation and the CryptoAPI scheme of Excel 2002 are detected but not decrypted.
What about Excel 4.0 and earlier?
Refused rather than half-read. Those files have no substreams at all, and producing a partial workbook from one would be worse than saying no.
Do formulas survive?
Yes. Excel never stored the text you typed — it stored parsed postfix tokens — so the formula is rendered back from those, including the parentheses Excel kept so that =(A1+A2)*3 comes back as itself.
Using it in your own code

The viewer, and the parser on its own

The parser produces a model that knows nothing about CSS or the DOM, so the same call runs in Node for extraction, search and conversion. Excel 97-2003 and its other generation are one package.

import { DocumentViewer } from '@genomdev/react';

<DocumentViewer file={file} fit="width" />;