Das POI -Projekt von Apache kann verwendet werden, um MS -Office -Dokumente zu verarbeiten, und es gibt auch eine .NET -Version davon auf Codeplex. POI -Projekte können verschiedene Java -APIs basierend auf OOXML- und Ole2 -Dateiformaten erstellen und verwalten. Die meisten MS -Büros befinden sich im Ole2 -Format. POI unterstützt Outlook über das HSMF-Unterprojekt, unterstützt Visio über das HDGF-Unterprojekt und unterstützt Publisher über das HPBF-Unterprojekt.
Einfaches Beispiel für die Verwendung von POI zum Extrahieren von Wort:
Wir müssen die beiden Pakete vorstellen: poi-3.7.jat und poi-scratchpad-3.7.ajr.
Die Codekopie lautet wie folgt:
Paket msoffice;
Import Java.io.file;
import Java.io.FileInputStream;
importieren java.io.ioException;
importieren java.io.inputstream;
import org.apache.poi.hwpf.hwpfdocument;
import org.apache.poi.hwpf.extractor.wordextractor;
import org.apache.poi.hwpf.usermodel.characterrun;
import org.apache.poi.hwpf.usermodel.Teragraph;
import org.apache.poi.hwpf.usermodel.range;
import org.apache.poi.hwpf.usermodel.section;
Öffentliches Klassenwort {
// alle Inhalte direkt extrahieren
public static String readdoc1 (InputStream) löst ioException {aus
WordExtractor extractor = new WordExtractor (IS);
return extractor.getText ();
}
// nach Abschnitt Abschnitt extrahieren, Absatz Absatz, Zeichenfolge Zeichenrun
public static void Readdoc2 (InputStream) löst ioException {aus
Hwpfdocument doc = new hwpfdocument (IS);
Bereich r = doc.getRange ();
für (int x = 0; x <r.numsections (); x ++) {
Abschnitt S = R.GetSection (x);
für (int y = 0; y <s.numparagraphs (); y ++) {
Absatz p = S.GetSparagraph (y);
für (int z = 0; z <p.numcharacterruns (); z ++) {
Charakterrun run = p.getaracterrun (z);
String text = run.text ();
System.out.print (Text);
}
}
}
}
public static void main (String [] args) {
Datei Datei = new Datei ("/home/orisun/1.doc");
versuchen {
FileInputStream fin = new FileInputStream (Datei);
String cont = Readdoc1 (Fin);
System.out.println (cont);
Fin.CLOSE ();
Fin = New FileInputStream (Datei);
Readdoc2 (Fin);
Fin.CLOSE ();
} catch (ioException e) {
E. printstacktrace ();
}
}
}
Beispiel für die PPT -Extraktion PPT:
Die Codekopie lautet wie folgt:
Paket msoffice;
Import Java.io.file;
import Java.io.FileInputStream;
importieren java.io.ioException;
importieren java.io.inputstream;
import org.apache.poi.hslf.hslfslideshow;
import org.apache.poi.hslf.extractor.powerpointextractor;
import org.apache.poi.hslf.model.slide;
import org.apache.poi.hslf.model.textrun;
import org.apache.poi.hslf.usermodel.slideshow;
öffentliche Klasse PPT {
// extrahieren Sie direkt den gesamten Inhalt der Folie
public static String readdoc1 (InputStream) löst ioException {aus
PowerPointExtractracor extractor = neuer PowerPointExtractor (IS);
return extractor.getText ();
}
// Lesen Sie eine Folie One Slide One Slide
public static void Readdoc2 (InputStream) löst ioException {aus
Diashow SS = New Diashow (New HSLFSlideshow (IS));
Slide [] Slides = ss.getSlides ();
für (int i = 0; i <glides.length; i ++) {
// Lesen Sie den Titel einer Folie
String title = Slides [i] .gettitle ();
System.out.println ("Titel:"+Titel);
// Lesen Sie den Inhalt einer Folie (einschließlich des Titels)
Textrun [] runs = glides [i] .gettextruns ();
für (int j = 0; j <runs.length; j ++) {
System.out.println (läuft [j] .GETTEXT ());
}
}
}
public static void main (String [] args) {
Datei Datei = new Datei ("/home/orisun/2.ppt");
versuchen{
FileInputStream fin = new FileInputStream (Datei);
String cont = Readdoc1 (Fin);
System.out.println (cont);
Fin.CLOSE ();
Fin = New FileInputStream (Datei);
Readdoc2 (Fin);
Fin.CLOSE ();
} catch (ioException e) {
E. printstacktrace ();
}
}
}
Excel -Dateien bestehen aus mehreren Arbeitsmappen und ein Arbeitsbuch besteht aus mehreren Blättern.
Einfaches Beispiel für POI Extraction Excel:
Die Codekopie lautet wie folgt:
Paket msoffice;
Import Java.io.file;
import Java.io.FileInputStream;
importieren java.io.ioException;
importieren java.io.inputstream;
Import Java.util.iterator;
import org.apache.poi.hssf.usermodel.hssfcell;
import org.apache.poi.hssf.usermodel.hssfrow;
import org.apache.poi.hssf.usermodel.hssfsheet;
import org.apache.poi.hssf.usermodel.hssfworkbook;
import org.apache.poi.hssf.extractor.excelextractor;
import org.apache.poi.poifs.Filesystem.poifsFilesystem;
import org.apache.poi.s.usermodel.row;
öffentliche Klasse Excel {
// Lesen Sie den gesamten Inhalt von Excel direkt durch
public static String readdoc1 (InputStream) löst ioException {aus
HSSFWORKBOOK WB = NEW HSSFWORKBOOK (neuer PoifsFilesystem (IS));
Excelextraktor extrahor = neuer excelextractor (WB);
extractor.setformulasnotresults (false);
extractor.setIncludeheetNames (true);
return extractor.getText ();
}
// beim Lesen auf Blatt, Reihen oder sogar Zellen verfeinern
public static double getavg (InputStream) löst ioException {aus
HSSFWORKBOOK WB = NEW HSSFWORKBOOK (neuer PoifsFilesystem (IS));
// Holen Sie sich das erste Blatt
HSSFSheet Sheet = wb.getsheetat (0);
Doppelmolekül = 0,0;
Doppel -Nenner = 0,0;
// Blatt für Linie übertragen
Iterator <row> riter = Sheet.Rowiterator ();
while (riter.hasnext ()) {
Hssfrow row = (hssfrow) riter.next ();
Hssfcell cell1 = row.getCell (4);
Hssfcell cell2 = row.getCell (4);
if (cell1.getCellType ()! = hssfcell.cell_type_numeric) {
System.err.println ("Number -Typ -Fehler!");
System.exit (-2);
}
if (cell2.getCellType ()! = hssfcell.cell_type_numeric) {
System.err.println ("Number -Typ -Fehler!");
System.exit (-2);
}
Nenner+= double.Parsedouble (cell2.toString (). trim ());
Molekül+= double.ParseDoUble (cell2.toString (). trim ())*float.Parsefloat (cell1.toString (). trim ());
}
Return Molekül/Nenner;
}
public static void main (String [] args) {
Datei Datei = neue Datei ("/home/orisun/3.xls");
versuchen{
FileInputStream fin = new FileInputStream (Datei);
String cont = Readdoc1 (Fin);
System.out.println (cont);
Fin.CLOSE ();
Fin = New FileInputStream (Datei);
System.out.println ("gewichtete durchschnittliche Punktzahl" + getavg (flos);
Fin.CLOSE ();
} catch (ioException e) {
E. printstacktrace ();
}
}
}