Tüm gömülü nesneleri (doc, ..., txt) bir ofis dosyasında (doc, docx, xls, xlsx, ppt, pptx, ...) listelemek için bir fırsat var mı?Tüm gömülü dosyaları Apache POI kullanarak bir microsoft office belgesinden nasıl listeleme?
Office dosyalarından metin ayıklamak için Apache POI (Java) Kitaplığı kullanıyorum. Gömülü nesnelerden tüm metni ayıklamam gerekmiyor, tüm gömülü belgelerin dosya isimleriyle bir günlük dosyası hoş olurdu (string objectFileNames = getEmbeddedFileNames(fileInputStream)
gibi bir şey).
Örnek: "excel.xls" adında başka bir dosya içeren "document.doc" adlı bir Word belgesine sahibim. Excel.xls dosya adını (bu durumda) bir günlük dosyasına yazmak istiyorum.
Bunu apache ana sayfasından (https://poi.apache.org/text-extraction.html) bazı örnek kod kullanarak denedim. Ancak Kodum her zaman aynı döner ("Altbilgi Metni: Başlık Metni"). Denedim ne
geçerli:
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();
}
GirdiDosyası nesnesi olarak doc dosyasını içeren ve outputfile txt olan xls vardır.
Bana yardım edebilecek birisi varsa.