protected void parse(DirectoryNode root, XHTMLContentHandler xhtml, Locale locale)
            throws IOException, SAXException, TikaException {
        String workbookEntryName = findWorkbookEntry(root);
        if (workbookEntryName == null) {
            if (root.hasEntry(BOOK_ENTRY)) {
                // Excel 5 / Excel 95 file
                // Records are in a different structure so needs a
                //  different parser to process them
                OldExcelExtractor extractor = new OldExcelExtractor(root);
                OldExcelParser.parse(extractor, xhtml);
                return;
            } else {
                // Corrupt file / very old file
                throw new TikaException("Couldn't find workbook entry");
            }
        }

        // If a password was supplied, use it, otherwise the default
        Biff8EncryptionKey.setCurrentUserPassword(getPassword());

        // Have the file processed in event mode
        TikaHSSFListener listener =
                new TikaHSSFListener(workbookEntryName, xhtml, locale, this, officeParserConfig);
        listener.processFile(root, isListenForAllRecords());
        listener.throwStoredException();
        updateMetadata(listener);

        for (Entry entry : root) {
            if (entry.getName().startsWith("MBD") && entry instanceof DirectoryEntry) {
                try {
                    handleEmbeddedOfficeDoc((DirectoryEntry) entry, xhtml, true);
                } catch (TikaException e) {
                    // ignore parse errors from embedded documents
                }
            }
        }
    }
Extracts text from an Excel Workbook writing the extracted content
to the specified {@link Appendable}.

@param filesystem POI file system
@throws IOException if an error occurs processing the workbook
                    or writing the extracted content
tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ExcelExtractor.java