> Source: https://txtfetch.com/tools/ods-to-text > Plain-text twin — every page on txtfetch.com has one. https://txtfetch.com/text --- # Your .ods spreadsheet, as text. No code required. Drop a real OpenDocument spreadsheet below, zipped .ods or flat .fods. Watch every sheet's cells become plain text right here, in your browser. Nothing is uploaded. It's the same read txtfetch's API gives you, just local. Drop a Word, Excel, PowerPoint, or OpenDocument (.odt/.ods/.odp, zipped or flat) file below to see the actual text it extracts to. It runs entirely in your browser, and nothing is uploaded. ## whats-hard-about-ods A row of cells in .ods isn't necessarily one XML element per cell. LibreOffice collapses a run of identical adjacent cells into a single , rather than writing out n separate elements. It does the same trick for whole rows, with table:number-rows-repeated. Read the element count literally, and a row of three 7s followed by a different value comes back as just one 7. Every column after it then shifts a place to the left. A sheet's last real row is almost always followed by one more row declaring a repeat count in the hundreds of thousands or more. That's LibreOffice's way of saying "the rest of the grid is empty" without writing out a million blank rows. This tool has to honor that count without actually producing a million blank lines itself. Merged cells add a second kind of gap. A heading spanning three columns is written as ONE real , followed by elements for the columns it covers. Those covered cells carry no text of their own, but they're still real position holders in the row. Drop them, and every cell after the merge shifts left by however many columns it spanned. That's a harder bug to notice than a missing row, because the sheet still reads as plausible text. The values just end up under the wrong header. Hiding a sheet in LibreOffice doesn't remove its data. The hidden sheet's rows sit in content.xml exactly like a visible sheet's. The hidden state is recorded separately, as a table:display="false" property on the sheet's style, rather than an attribute on the sheet element itself. That's one more layer of indirection than xlsx's state="hidden". A cell's number or date comes back as whatever ODF actually stored, not the formatted text a spreadsheet application renders on screen. A date arrives as a raw value, not "14 March 2026", because number formatting lives in styles this quick read doesn't apply. ## what-to-do-next Got the text out and want the API call for it directly? The panel above already has it, with your file's real name. Extracting many workbooks, or files bigger than this browser tool's 25 MB cap? [See the full OpenDocument extraction guide (.odt, .ods, .odp) →](https://txtfetch.com/extract/odf) ## faq **Does this tool upload my spreadsheet anywhere?**: No. Everything happens in your browser. A zipped .ods is read with the Web Platform's own DecompressionStream API, and a flat .fods is read directly with no unzip step at all. Only the finished text ever leaves your machine, and only if you choose to copy or download it. **Does it work on the flat .fods variant, not just a zipped .ods?**: Yes. This tool recognizes a flat file's own shape from its bytes: an XML document rooted at , not a zip. It reads that the same way it reads a zipped file's content.xml. **Does it handle repeated cells and rows correctly?**: Yes. table:number-columns-repeated and table:number-rows-repeated are both honored, so a row LibreOffice wrote as one cell repeated three times comes out as three separate values, not one. The huge repeat counts real files use to pad a sheet out to its full grid are capped and trimmed. They don't turn into a wall of blank tab-separated cells. **What about merged cells?**: A merged cell's covered columns come out as empty cells, rather than being dropped. So every value after a merge stays under the right column, instead of silently shifting left. **Are hidden sheets included?**: Yes, and flagged. Hiding a sheet doesn't remove its data. This tool includes hidden sheets in the extracted text, and marks each one "(hidden)". That way you can tell which sheets weren't visible in the spreadsheet. **Do dates and percentages come back formatted, or as raw numbers?**: As their raw stored value. This tool doesn't apply the number formats recorded in the file's styles. So a date comes back as its stored value, rather than the text a spreadsheet app would display for it. **Is there a file size limit?**: This tool reads up to 25 MB entirely in your browser. Larger workbooks, or a batch you want to automate, go through the same extraction via the API, which has no such limit. ## That was one file. The API does the queue. This page read your ODS on your own machine. The API reads a folder of them. [Read the quickstart →](https://txtfetch.com/docs) [Get an API key →](https://app.txtfetch.com/signup)