Skip to content
Server-sideDeleted in 30 minutes

Convert ODS to HTML

Publishing a sheet turns a live document into a fixed one. Formulas become the numbers they had produced, because a browser has no calculation engine, and the first sheet becomes the table because a page has no tabs. What you get is a snapshot that has to be republished whenever the workbook moves on.

Use this without the search next time. Prathom Workbench puts Prathom's tools in your toolbar.

Add to Chrome — free
ODSHTML

Drop your ODS file here, or click to browse

Up to 50 MB. Deleted automatically after 30 minutes.

What it does

  • The first sheet becomes a table element
  • Formulas are published as their computed values
  • Cell formatting is carried as markup and can be stripped

How to use ODS to HTML

  1. 1

    Upload the .ods

    A LibreOffice or OpenOffice spreadsheet. Put the sheet you want to publish first in the workbook.

  2. 2

    The sheet becomes a table

    Rows and cells map directly, and merged cells become row or column spans so grouped headers still group.

  3. 3

    Republish when the data changes

    The table is a snapshot. Nothing links it back to the workbook, so an updated sheet means converting again.

How it works

The ODS is unzipped and its first sheet is read from the content XML. Each row becomes a table row and each cell a table cell, with merged regions emitted as spans so the visual grouping in the sheet survives on the page.

Cells holding formulas contribute their stored computed values, since a page cannot evaluate anything.

The snapshot problem

This is the property that catches people. A spreadsheet is a living document: change an input and every dependent figure follows. A published table is a photograph of it.

Nothing about the markup remembers where it came from, so there is no update path other than converting again. For a quarterly figure that is fine. For anything that changes daily, either automate the re-export or use an application rather than a static page.

What does not come across

Sheets beyond the first, live calculation, sorting, filtering, charts, and every other interactive property of a spreadsheet. A table is for reading.

Formatting, and why it is included

The workbook's cell formatting is carried into the markup. That is the right default, because pasted into a bare page the table looks like the sheet did. On a site with its own table styles it is the first thing to strip, and stripping is easier than reconstructing. If you want structure only, convert to CSV and generate the markup from that instead.

What a published table needs that a sheet does not

The conversion produces a correct table of the first sheet's values, and a table on a web page usually wants a little more than correct.

Column headers should be header cells rather than a bold first row, so screen readers and search engines can tell what the numbers are. Wide tables need a container that scrolls on a phone. Numbers generally read better right-aligned than left, which a spreadsheet does automatically and plain markup does not.

None of that can be inferred from the file, so none of it is done here. What you get is honest structure that your page's styles can then take responsibility for, which is the right division of labor.

Examples

A published dataset for a project page

figures.ods - 3 sheets, first is the published summary
figures.html - one table, merged headers preserved

The summary sheet publishes cleanly and the merged header cells survive as spans. The working sheets behind it stay in the workbook, which is the intended outcome here.

A sheet that changes weekly

stock.ods - totals recalculated every Monday
stock.html - the totals as they stood at conversion

The page will keep showing last week's numbers until it is regenerated. If that is a problem, the answer is a scheduled re-export rather than anything the conversion can do.

Frequently asked questions

Will the page update when the spreadsheet does?

No. The conversion produces static markup with no connection back to the workbook, so the numbers on the page are the numbers at the moment of conversion. There is no way for a plain HTML table to recalculate or to fetch new values. If the data changes on a schedule, re-export on the same schedule; if it changes constantly, this is the wrong approach entirely.

Which sheet gets published?

The first one. An HTML table is a single table and there is no obvious way to lay several sheets into one page without inventing a structure you did not ask for. Move the sheet you want to the front of the workbook in LibreOffice, which is a single drag, and convert again.

Can I keep my own site styling?

The output carries the spreadsheet's formatting as markup, which suits an empty page and fights a site that already styles its tables. Removing the inline formatting after conversion leaves plain rows and cells that inherit whatever your stylesheet applies. Going via CSV instead gives structure with no formatting at all, if that is what you want.