Gibt es eine Möglichkeit, alle eingebetteten Objekte (doc, ..., txt) in einer Office-Datei (doc, docx, xls, xlsx, ppt, pptx, ...) aufzulisten?Wie listet man alle eingebetteten Dateien aus einem Microsoft Office-Dokument mit Apache POI auf?
Ich verwende Apache POI (Java) Bibliothek, um Text aus Office-Dateien zu extrahieren. Ich muss nicht den ganzen Text von eingebetteten Objekten extrahieren, eine Protokolldatei mit den Dateinamen aller eingebetteten Dokumente wäre schön (so etwas wie: string objectFileNames = getEmbeddedFileNames(fileInputStream)
).
Beispiel: Ich habe ein Word-Dokument "test.doc", das eine andere Datei namens "excel.xls" enthält. Ich möchte den Dateinamen von excel.xls (in diesem Fall) in eine Protokolldatei schreiben.
Ich versuchte dies mit einigen Beispielcode von der Apache-Homepage (https://poi.apache.org/text-extraction.html). Aber mein Code gibt immer den gleichen zurück ("Footer Text: Header Text").
Was ich versucht ist:
private static void test(String inputfile, String outputfile) throws Exception {
String[] extractedText = new String[100];
int emb = 0;//used for counter of embedded objects
InputStream fis = new FileInputStream(inputfile);
PrintWriter out = new PrintWriter(outputfile);//Text in File (txt) schreiben
System.out.println("Emmbedded Search started. Inputfile: " + inputfile);
//Based on Apache sample Code
emb = 0;//Reset Counter
POIFSFileSystem emb_fileSystem = new POIFSFileSystem(fis);
// Firstly, get an extractor for the Workbook
POIOLE2TextExtractor oleTextExtractor =
ExtractorFactory.createExtractor(emb_fileSystem);
// Then a List of extractors for any embedded Excel, Word, PowerPoint
// or Visio objects embedded into it.
POITextExtractor[] embeddedExtractors =
ExtractorFactory.getEmbededDocsTextExtractors(oleTextExtractor);
for (POITextExtractor textExtractor : embeddedExtractors) {
// If the embedded object was an Excel spreadsheet.
if (textExtractor instanceof ExcelExtractor) {
ExcelExtractor excelExtractor = (ExcelExtractor) textExtractor;
extractedText[emb] = (excelExtractor.getText());
}
// A Word Document
else if (textExtractor instanceof WordExtractor) {
WordExtractor wordExtractor = (WordExtractor) textExtractor;
String[] paragraphText = wordExtractor.getParagraphText();
for (String paragraph : paragraphText) {
extractedText[emb] = paragraph;
}
// Display the document's header and footer text
System.out.println("Footer text: " + wordExtractor.getFooterText());
System.out.println("Header text: " + wordExtractor.getHeaderText());
}
// PowerPoint Presentation.
else if (textExtractor instanceof PowerPointExtractor) {
PowerPointExtractor powerPointExtractor =
(PowerPointExtractor) textExtractor;
extractedText[emb] = powerPointExtractor.getText();
emb++;
extractedText[emb] = powerPointExtractor.getNotes();
}
// Visio Drawing
else if (textExtractor instanceof VisioTextExtractor) {
VisioTextExtractor visioTextExtractor =
(VisioTextExtractor) textExtractor;
extractedText[emb] = visioTextExtractor.getText();
}
emb++;//Count Embedded Objects
}//Close For Each Loop POIText...
for(int x = 0; x <= extractedText.length; x++){//Write Results to TXT
if (extractedText[x] != null){
System.out.println(extractedText[x]);
out.println(extractedText[x]);
}
else {
break;
}
}
out.close();
}
Eingabedatei xls, das eine doc-Datei als Objekt enthält und Ausgabedatei ist txt.
Danke, wenn mir jemand helfen kann.