jspreadsheet / jspreadsheet/ce
**ODS export — closing the loop on ODS round-trips**
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 7.2k
- Forks
- 890
- PR merge metrics
- No merged PRs in 30d
Description
ODS export — closing the loop on ODS round-trips
Jspreadsheet CE can import ODS files via tabularjs, but there's currently no way to export back to ODS. Users who open an ODS file, edit it, and want to save it back to ODS are stuck — the only export option is CSV.
ODS export is now possible with odf-kit (Apache 2.0, zero dependencies beyond fflate for ZIP):
import { OdsDocument } from 'odf-kit'
const data = jspreadsheet.getData() // array of arrays
const doc = new OdsDocument()
const sheet = doc.addSheet('Sheet1')
for (const row of data) {
sheet.addRow(row)
}
const bytes = await doc.save()
The output is a spec-compliant .ods file that passes the OASIS ODF validator and opens correctly in LibreOffice, Excel, and Google Sheets.
odf-kit also supports number formats, merged cells, freeze rows/columns, hyperlinks, and sheet tab colors — so the integration can be as rich as needed.
Happy to help with a proof-of-concept or integration if there's interest.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the existing CSV export and the ODS import through tabularjs, then review how jspreadsheet.getData() exposes the sheet data. A completed integration should use odf-kit to produce a spec-compliant .ods file that opens in LibreOffice, Excel, and Google Sheets, with the required export entry point documented.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- frontend
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100