O projeto POI da Apache pode ser usado para processar documentos do MS Office, e também há uma versão .NET no CodePlex. Os projetos POI podem criar e manter várias APIs Java com base nos formatos de arquivo OOXML e OLE2. A maioria dos escritórios da MS está no formato OLE2. O POI suporta o Outlook através do sub-projeto HSMF, suporta o Visio através do sub-projeto HDGF e suporta o editor através do sub-projeto HPBF.
Exemplo simples de usar PoI para extrair palavra:
Precisamos apresentar os dois pacotes: Poi-3.7.jat e Poi-Scratchpad-3.7.ajr.
A cópia do código é a seguinte:
pacote msOffice;
importar java.io.file;
importar java.io.fileInputStream;
importar java.io.ioException;
importar 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;
classe pública palavra {
// extraia diretamente todo o conteúdo
public static string readdoc1 (inputStream) lança ioexception {
WordExtractor Extrator = new WordExtractor (IS);
return extrator.getText ();
}
// Extrair por seção, seção, parágrafo parágrafo, String CaracterRun
public static void readdoc2 (inputStream) lança ioexception {
Hwpfdocument doc = novo hwpfdocument (IS);
Intervalo r = doc.getRange ();
for (int x = 0; x <r.numsects (); x ++) {
Seção s = r.getSection (x);
for (int y = 0; y <s.numparagraphs (); y ++) {
Parágrafo p = s.getParagraph (y);
for (int z = 0; z <p.numcharacterRuns (); z ++) {
Caracterrun run = p.getcharacterrun (z);
String text = run.text ();
System.out.print (texto);
}
}
}
}
public static void main (string [] args) {
Arquivo de arquivo = novo arquivo ("/home/orisun/1.doc");
tentar {
FileInputStream fin = new FileInputStream (FILE);
String cont = readDoc1 (FIN);
System.out.println (cont);
fin.close ();
fin = new FileInputStream (arquivo);
readDoc2 (FIN);
fin.close ();
} catch (ioexception e) {
E.PrintStackTrace ();
}
}
}
Exemplo de extração POI ppt:
A cópia do código é a seguinte:
pacote msOffice;
importar java.io.file;
importar java.io.fileInputStream;
importar java.io.ioException;
importar 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;
classe pública ppt {
// extraia diretamente todo o conteúdo do slide
public static string readdoc1 (inputStream) lança ioexception {
PowerPointExtractor Extrator = new PowerPointExtractor (IS);
return extrator.getText ();
}
// leia um slide um slide um slide
public static void readdoc2 (inputStream) lança ioexception {
Slideshow ss = nova apresentação de slides (nova apresentação de hslfslides (IS));
Slide [] slides = ss.getslides ();
for (int i = 0; i <slides.length; i ++) {
// Leia o título de um slide
Title string = slides [i] .gettitle ();
System.out.println ("Title:"+title);
// Leia o conteúdo de um slide (incluindo o título)
Textrun [] corre = slides [i] .getTextrUns ();
for (int j = 0; j <runS.Length; j ++) {
System.out.println (executa [j] .getText ());
}
}
}
public static void main (string [] args) {
Arquivo de arquivo = novo arquivo ("/home/orisun/2.ppt");
tentar{
FileInputStream fin = new FileInputStream (FILE);
String cont = readDoc1 (FIN);
System.out.println (cont);
fin.close ();
fin = new FileInputStream (arquivo);
readDoc2 (FIN);
fin.close ();
} catch (ioexception e) {
E.PrintStackTrace ();
}
}
}
Os arquivos do Excel são compostos por várias pastas de trabalho e uma pasta de trabalho consiste em várias folhas.
Exemplo simples de Extração POI Excel:
A cópia do código é a seguinte:
pacote msOffice;
importar java.io.file;
importar java.io.fileInputStream;
importar java.io.ioException;
importar java.io.inputStream;
importar 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;
classe pública Excel {
// Leia todo o conteúdo do Excel diretamente
public static string readdoc1 (inputStream) lança ioexception {
HSSFWorkbook WB = novo HSSFWorkbook (novo PoifsFilesystem (IS));
Excelextractor extrator = novo Excelextractor (WB);
extrator.setFormULAsNotResults (false);
extrator.setincludesheetNames (true);
return extrator.getText ();
}
// refina a folha, linha ou até células ao ler
public static duplo getavg (inputStream) lança ioexception {
HSSFWorkbook WB = novo HSSFWorkbook (novo PoifsFilesystem (IS));
// Obtenha a primeira folha
Folha de hssfsheet = wb.getSheetat (0);
molécula dupla = 0,0;
denominador duplo = 0,0;
// Folha de transferência por linha
Iterator <wrow> riter = sheet.rowiterator ();
while (riter.hasnext ()) {
Hssfrow linha = (hssfrow) riter.next ();
HSSFCell Cell1 = Row.getCell (4);
HSSFCell Cell2 = Row.getCell (4);
if (Cell1.getCellType ()! = hssfcell.cell_type_numeric) {
System.err.println ("Erro de tipo de número!");
System.Exit (-2);
}
if (Cell2.getCellType ()! = hssfcell.cell_type_numeric) {
System.err.println ("Erro de tipo de número!");
System.Exit (-2);
}
denominador+= duplo.parseDouble (Cell2.toString (). TRIM ());
molécula+= duplo.parseDouble (Cell2.toString (). TRIM ())*float.parsefloat (Cell1.toString (). TRIM ());
}
molécula de retorno/denominador;
}
public static void main (string [] args) {
Arquivo de arquivo = novo arquivo ("/home/orisun/3.xls");
tentar{
FileInputStream fin = new FileInputStream (FILE);
String cont = readDoc1 (FIN);
System.out.println (cont);
fin.close ();
fin = new FileInputStream (arquivo);
System.out.println ("pontuação média ponderada" + getavg (fin));
fin.close ();
} catch (ioexception e) {
E.PrintStackTrace ();
}
}
}