> Source: https://txtfetch.com/fixes/office-text-missing > Plain-text twin — every page on txtfetch.com has one. https://txtfetch.com/text --- # The text is definitely in the file. It's just not in extracted\_text. Office documents are a zip archive of separate XML parts, not one flat stream. A parser that reads the visible body and stops silently drops whatever lives in the other parts. looks-like ``` extracted_text: "Slide 4\n\nQ3 roadmap overview" // the deck's speaker notes on slide 4 — the actual talking points — never appear anywhere in the response. ``` The visible body text extracts fine. A specific part of the file's own structure just never made it into extracted\_text. why-it-happens Office documents aren't one flat stream of text. They're a zip archive of separate XML parts, each holding a different piece of the document's content. Each part carries its own relationships back to where it's used. A .pptx keeps each slide's visible text in ppt/slides/slideN.xml. Speaker notes live entirely separately in ppt/notesSlides/, with their own files and their own relationship IDs. A parser that reads slideN.xml and stops silently drops the notes. That's not because the notes were empty, but because it never looked there. The same shape repeats across the Office family. Grouped or nested shapes hide their text an extra level down inside the shape tree rather than at the top level. SmartArt diagram labels live in a separate diagrams/data\*.xml part, disconnected from the diagram's visible layout XML. A .docx's tracked changes and comments are stored in their own parts (w:ins/w:del runs, comments.xml) rather than inline in the main body flow. And a .xlsx's string cell values are indices into a shared xl/sharedStrings.xml table, not inline text. A reader that doesn't resolve that indirection gets numbers pointing at other numbers instead of the words themselves. None of this shows up as garbled or damaged text. The extraction genuinely just doesn't include it. The response can look completely clean and successful while quietly leaving out an entire category of content. confirm-it - Every Office file is a zip archive. List its parts and grep for the text you expect to confirm it's actually there before assuming a parser bug. - Open the file in the native app (Word, PowerPoint, Excel, or LibreOffice). Check the specific view you suspect is missing: the notes pane, the comments pane, or a specific SmartArt diagram. Compare it against what extracted\_text actually contains. fix-it-yourself Inspect the raw XML parts yourself Confirms exactly what's inside the file before you go looking for a parser fix. Every Office file is just a zip you can unzip and grep. bash ``` unzip -o deck.pptx -d deck_unzipped grep -r "speaker note text" deck_unzipped/ppt/notesSlides/ ``` Use a part-aware library for the specific content you need python-pptx, python-docx, and openpyxl expose comments, tracked changes, speaker notes, and SmartArt text as distinct properties rather than flattening everything (or nothing) into one string. python ``` from pptx import Presentation prs = Presentation("deck.pptx") for slide in prs.slides: if slide.has_notes_slide: print(slide.notes_slide.notes_text_frame.text) ``` what-txtfetch-does txtfetch's Office parsing, via Apache Tika's POI-based parsers, reads slide body text AND speaker notes for .pptx, folding both into the response. See /extract/pptx for the specifics of what's covered part by part. Grouped-shape and SmartArt text extraction depends on Tika's own POI support for that underlying part. That support is broad, but not exhaustive, for every nested or unusual shape structure. Tracked-changes and comment text are similarly parsed where Tika's OOXML support covers that part. A construct outside what Tika's parser resolves comes back the same way it would for any Tika-based pipeline: absent, not garbled. If you depend on comments, tracked changes, or a specific diagram's text being present, verify it against a real extraction call on your actual file. Don't assume coverage. See /extract/docx, /extract/pptx, and /extract/xlsx for what each format covers. what-it-costs-you-downstream Missing speaker notes or comment text isn't a formatting nuisance in a RAG pipeline. It's silent data loss. The exact context, such as a slide's talking points or a reviewer's comment explaining a decision, never enters the vector store at all. Nothing about a successful-looking extraction call tells you it's gone. faq **Does txtfetch extract PowerPoint speaker notes?**: Yes. Tika reads both the slide body (ppt/slides/) and the speaker notes (ppt/notesSlides/) and includes them together in extracted_text. See /extract/pptx. **Why would text be missing from extraction without any error?**: Office documents store different kinds of content in separate XML parts inside the zip archive: body text, speaker notes, comments, tracked changes, and SmartArt labels. A parser that doesn't resolve a specific part returns a perfectly successful response that simply never included that part's text. Nothing about the response signals the gap. **How do I check what's actually inside my Office file before assuming a bug?**: Every .docx/.pptx/.xlsx is a zip archive. `unzip -l file.pptx` lists every part. Grep the relevant XML files (ppt/notesSlides/, word/comments.xml, xl/sharedStrings.xml) directly to confirm the text you expect is actually present in the file. related-reading - [Extract text from Word (.docx) →](https://txtfetch.com/extract/docx) - [Extract text from PowerPoint (.pptx) →](https://txtfetch.com/extract/pptx) - [Extract text and tables from Excel (.xlsx) →](https://txtfetch.com/extract/xlsx) - [Parsing Office docs into clean text →](https://txtfetch.com/blog/parse-office-docs-docx-pptx-xlsx-for-llms) ## Fix the text you already have. The free cleaner repairs this damage in your browser. Nothing leaves the page. [Clean up your text →](https://txtfetch.com/tools/clean-extracted-text) [Get an API key →](https://app.txtfetch.com/signup)