オフィスファイル(doc、docx、xls、xlsx、ppt、pptx、...)にすべての埋め込みオブジェクト(doc、...、txt)をリストする機会はありますか?Apache POIを使用してMicrosoft Officeドキュメントからすべての埋め込みファイルを一覧表示するにはどうすればよいですか?
オフィスファイルからテキストを抽出するために、Apache POI(Java)Libraryを使用しています。埋め込みオブジェクトからすべてのテキストを抽出する必要はありません。埋め込まれたすべてのドキュメントのファイル名を持つログファイルはいいでしょう(string objectFileNames = getEmbeddedFileNames(fileInputStream)
など)。
例:「excel.xls」という別のファイルを含むWord文書「test.doc」があります。 excel.xlsのファイル名(この場合)をログファイルに書きたいと思います。
私はApacheのホームページ(https://poi.apache.org/text-extraction.html)からいくつかのサンプルコードを使ってこれを試しました。しかし、私のコードは常に同じものを返します( "Footer Text:Header Text")。私が試した何
は次のとおりです。
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();
}
INPUTFILEは、オブジェクトとしてドキュメントファイルが含まれており、OUTPUTFILEがTXTでXLS、です。
誰でも助けてくれてありがとう。