El proyecto POI de Apache se puede utilizar para procesar los documentos de MS Office, y también hay una versión de .NET en CodePlex. Los proyectos POI pueden crear y mantener varias API Java basadas en formatos de archivo OOXML y OLE2. La mayoría de las oficinas de MS están en formato OLE2. POI admite Outlook a través del subproyecto HSMF, admite Visio a través del subproyecto HDGF y admite Publisher a través del subproyecto HPBF.
Ejemplo simple de usar POI para extraer Word:
Necesitamos presentar los dos paquetes: Poi-3.7.jat y POI-Scratchpad-3.7.AJR.
La copia del código es la siguiente:
Paquete MSOffice;
import java.io.file;
import java.io.fileInputStream;
import java.io.ioException;
import java.io.inputstream;
importar org.apache.poi.hwpf.hwpfDocument;
importar org.apache.poi.hwpf.extractor.wordExtractor;
importar org.apache.poi.hwpf.usermodel.characterRun;
importar org.apache.poi.hwpf.usermodel.paragraph;
importar org.apache.poi.hwpf.usermodel.range;
importar org.apache.poi.hwpf.usermodel.section;
Palabra de clase pública {
// Extraer directamente todo el contenido
public static string readdoc1 (inputStream is) lanza ioexception {
WORDEXTRATOR extractor = new WordExtractor (is);
return extractor.gettext ();
}
// extraer por sección sección, párrafo párrafo, cadena caracteres
public static void readdoc2 (inputStream is) lanza ioexception {
HwpfDocument doc = new hwpfDocument (is);
Rango r = doc.getRange ();
para (int x = 0; x <r.numsections (); x ++) {
Sección S = R.getSection (x);
para (int y = 0; y <s.numparagraphs (); y ++) {
Párrafo p = s.getparagraph (y);
para (int z = 0; z <p.numCharacterRuns (); z ++) {
Caracteresrun run = p.getCharacterRun (z);
String text = run.Text ();
System.out.print (texto);
}
}
}
}
public static void main (string [] args) {
Archivo archivo = nuevo archivo ("/home/orisun/1.doc");
intentar {
FileInputStream FIN = new FileInputStream (archivo);
Cadena cont = readdoc1 (fin);
System.out.println (cont);
fin.close ();
fin = new FileInputStream (archivo);
readDoc2 (aleta);
fin.close ();
} Catch (ioException e) {
E.PrintStackTrace ();
}
}
}
Ejemplo de extracción de POI PPT:
La copia del código es la siguiente:
Paquete MSOffice;
import java.io.file;
import java.io.fileInputStream;
import java.io.ioException;
import java.io.inputstream;
importar org.apache.poi.hslf.hslfslideshow;
importar org.apache.poi.hslf.extractor.powerpointExtractor;
importar org.apache.poi.hslf.model.slide;
importar org.apache.poi.hslf.model.textrun;
importar org.apache.poi.hslf.usermodel.slideshow;
clase pública ppt {
// Extraer directamente todo el contenido de la diapositiva
public static string readdoc1 (inputStream is) lanza ioexception {
PowerPointExtractor Extractor = new PowerPointExtractor (is);
return extractor.gettext ();
}
// Leer una diapositiva una diapositiva una diapositiva
public static void readdoc2 (inputStream is) lanza ioexception {
Presentación de diapositivas ss = nueva presentación de diapositivas (nueva hslfslideshow (is));
Diapositivas [] diapositivas = ss.getslides ();
para (int i = 0; i <slides.length; i ++) {
// Lea el título de una diapositiva
Title de cadena = diapositivas [i] .gettitle ();
System.out.println ("Título:"+Título);
// Lea el contenido de una diapositiva (incluido el título)
Textrun [] ejecuta = diapositivas [i] .gettextruns ();
para (int j = 0; j <runs.length; j ++) {
System.out.println (ejecuta [j] .gettext ());
}
}
}
public static void main (string [] args) {
Archivo archivo = nuevo archivo ("/home/orisun/2.ppt");
intentar{
FileInputStream FIN = new FileInputStream (archivo);
Cadena cont = readdoc1 (fin);
System.out.println (cont);
fin.close ();
fin = new FileInputStream (archivo);
readDoc2 (aleta);
fin.close ();
} Catch (ioException e) {
E.PrintStackTrace ();
}
}
}
Los archivos de Excel se componen de múltiples libros de trabajo, y un libro de trabajo consta de múltiples hojas.
Ejemplo simple de extracción de POI Excel:
La copia del código es la siguiente:
Paquete MSOffice;
import java.io.file;
import java.io.fileInputStream;
import java.io.ioException;
import java.io.inputstream;
import java.util.iterator;
importar org.apache.poi.hssf.usermodel.hssfcell;
importar org.apache.poi.hssf.usermodel.hssfrow;
importar org.apache.poi.hssf.usermodel.hssfsheet;
importar org.apache.poi.hssf.usermodel.hssfworkbook;
importar org.apache.poi.hssf.extractor.excelextractor;
importar org.apache.poi.poifs.filesystem.poifsfilesystem;
importar org.apache.poi.ss.usermodel.row;
clase pública Excel {
// Lea todo el contenido de Excel directamente
public static string readdoc1 (inputStream is) lanza ioexception {
Hssfworkbook wb = new HSSFWorkBook (new PoifsFilesystem (IS));
Excelextractor Extractor = new Excelextractor (WB);
Extractor.setFormulaSNotResults (falso);
Extractor.setInCludeSheetNames (verdadero);
return extractor.gettext ();
}
// Refinar a la hoja, fila o incluso celdas al leer
public static double getAvg (inputStream is) lanza ioexception {
Hssfworkbook wb = new HSSFWorkBook (new PoifsFilesystem (IS));
// consigue la primera hoja
HSSFSheet Sheet = wb.getSheetat (0);
Doble molécula = 0.0;
Doble denominador = 0.0;
// Hoja de transferencia por línea
Iterador <gow> riter = shead.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 ("¡Error de tipo de número!");
System.exit (-2);
}
if (cell2.getCellType ()! = hssfcell.cell_type_numeric) {
System.err.println ("¡Error de tipo de número!");
System.exit (-2);
}
denominador+= double.parsedOuble (cell2.ToString (). Trim ());
molécula+= double.parsedOuble (celular2.ToString (). trim ())*float.parsefloat (celular1.ToString (). Trim ());
}
molécula de retorno/denominador;
}
public static void main (string [] args) {
Archivo archivo = nuevo archivo ("/home/orisun/3.xls");
intentar{
FileInputStream FIN = new FileInputStream (archivo);
Cadena cont = readdoc1 (fin);
System.out.println (cont);
fin.close ();
fin = new FileInputStream (archivo);
System.out.println ("puntaje promedio ponderado" + getAvg (fin));
fin.close ();
} Catch (ioException e) {
E.PrintStackTrace ();
}
}
}