java使用poi读取ppt文件和poi读取excel、word示例
发布时间:2022-09-08 04:55:23
Apache的POI项目可以用来处理MS Office文档,codeplex上还有一个它的.net版本。POI项目可创建和维护操作各种基于OOXML和OLE2文件格式的Java API。大多数MS Office都是OLE2格式的。POI通HSMF子项目来支持Outlook,通过HDGF子项目来支持Visio,通过HPBF子项目来支持Publisher。
使用POI抽取Word简单示例:
要引入poi-3.7.jat和poi-scratchpad-3.7.ajr这两个包。
package msoffice;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import 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.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Section;
public class Word {
// 直接抽取全部内容
public static String readDoc1(InputStream is) throws IOException {
WordExtractor extractor = new WordExtractor(is);
return extractor.getText();
}
//分章节Section、段落Paragraph、字符串CharacterRun抽取
public static void readDoc2(InputStream is) throws IOException {
HWPFDocument doc=new HWPFDocument(is);
Range r=doc.getRange();
for(int x=0;x<r.numSections();x++){
Section s=r.getSection(x);
for(int y=0;y<s.numParagraphs();y++){
Paragraph p=s.getParagraph(y);
for(int z=0;z<p.numCharacterRuns();z++){
CharacterRun run=p.getCharacterRun(z);
String text=run.text();
System.out.print(text);
}
}
}
}
public static void main(String[] args) {
File file = new File("/home/orisun/1.doc");
try {
FileInputStream fin = new FileInputStream(file);
String cont = readDoc1(fin);
System.out.println(cont);
fin.close();
fin = new FileInputStream(file);
readDoc2(fin);
fin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
POI抽取PPT示例:
package msoffice;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import 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;
public class PPT {
//直接抽取幻灯片的全部内容
public static String readDoc1(InputStream is) throws IOException{
PowerPointExtractor extractor=new PowerPointExtractor(is);
return extractor.getText();
}
//一张幻灯片一张幻灯片地读取
public static void readDoc2(InputStream is) throws IOException{
SlideShow ss=new SlideShow(new HSLFSlideShow(is));
Slide[] slides=ss.getSlides();
for(int i=0;i<slides.length;i++){
//读取一张幻灯片的标题
String title=slides[i].getTitle();
System.out.println("标题:"+title);
//读取一张幻灯片的内容(包括标题)
TextRun[] runs=slides[i].getTextRuns();
for(int j=0;j<runs.length;j++){
System.out.println(runs[j].getText());
}
}
}
public static void main(String[] args){
File file = new File("/home/orisun/2.ppt");
try{
FileInputStream fin=new FileInputStream(file);
String cont=readDoc1(fin);
System.out.println(cont);
fin.close();
fin=new FileInputStream(file);
readDoc2(fin);
fin.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
Excel文件由多个Workbook组成,一个Workbook由多个Sheet组成。
POI抽取Excel简单示例:
package msoffice;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import 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.ss.usermodel.Row;
public class Excel {
//直接读取Excel的全部内容
public static String readDoc1(InputStream is)throws IOException{
HSSFWorkbook wb=new HSSFWorkbook(new POIFSFileSystem(is));
ExcelExtractor extractor=new ExcelExtractor(wb);
extractor.setFormulasNotResults(false);
extractor.setIncludeSheetNames(true);
return extractor.getText();
}
//读取时细化到Sheet、行甚至单元格
public static double getAvg(InputStream is)throws IOException{
HSSFWorkbook wb=new HSSFWorkbook(new POIFSFileSystem(is));
//获取第一张sheet
HSSFSheet sheet=wb.getSheetAt(0);
double molecule=0.0;
double denominator=0.0;
//按行遍历sheet
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("数字类型错误!");
System.exit(-2);
}
if(cell2.getCellType()!=HSSFCell.CELL_TYPE_NUMERIC){
System.err.println("数字类型错误!");
System.exit(-2);
}
denominator+=Double.parseDouble(cell2.toString().trim());
molecule+=Double.parseDouble(cell2.toString().trim())*Float.parseFloat(cell1.toString().trim());
}
return molecule/denominator;
}
public static void main(String[] args){
File file = new File("/home/orisun/3.xls");
try{
FileInputStream fin=new FileInputStream(file);
String cont=readDoc1(fin);
System.out.println(cont);
fin.close();
fin=new FileInputStream(file);
System.out.println("加权平均分"+getAvg(fin));
fin.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
猜你喜欢
- 目录一、Shiro简介 核心角色核心理念二、整合SpringBoot2框架 1、核心依赖2、Shiro核心配置3、域对象
- 本篇紧接上一篇内容继续,还是从继承里的细节开始1.代码块初始化关于代码块的定义和使用因为之前已经进行过介绍,所以这里就不再赘述,我们所关注的
- 背景:日常开发ERP系统,会有一些工单或者合同之类需要填写打印。我们就会将其word模板来通过系统自动化填写并转换为PDF格式(PDF文件打
- 前言每次update Maven Project 的时候,看着进度条寸步难行,心里憋得十分难受,明显阻碍我学习的热情。 maven仓库默认在
- 1. 概述官方JavaDocsApi: java.awt.FlowLayoutFlowLayout,流式布局管理器。按水平方向依次排列放置组
- Java多线程线程的创建1.继承Thread2.实现Runnable3.实现Callable使用继承Thread类来开发多线程的应用程序在设
- 目录事件最基本的用法理解路由事件WPF中使用路由事件升级了传统应用开发中的事件,在WPF中使用路由事件能更好的处理事件相关的逻辑,我们从这篇
- 本文需求实现了java通过方向键控制小球移动的具体过程,供大家参考,具体内容如下需求分析:第一 要画出一个小球第二 要能通过控制方向键控制它
- 前言文件上传是项目开发中最常见的功能之一 ,SpringMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配Multi
- 前言本文主要讲述如何使用Java + FFmpeg实现对视频文件的信息提取、码率压缩、分辨率转换等功能;之前在网上浏览了一大圈Java使用F
- 本文实例为大家分享了安装和配置maven环境的具体步骤,供大家参考,具体内容如下下载maven:1.进入官网下载:http://maven.
- 本文实例为大家分享了Java实现简单的飞机大战游戏,控制主飞机的具体代码,供大家参考,具体内容如下接着上一篇:Java实现简单的飞机大战游戏
- 最近要做一个网站,要求实现验证码程序,经过不断调试,终于成功实现功能。一、验证码生成类生成验证码的话需要用到java的Graphics类库,
- 背景最近好几个项目在运行过程中客户都提出文件上传大小的限制能否设置的大一些,用户经常需要上传好几个G的资料文件,如图纸,视频等,并且需要在上
- 本文实例讲述了C#推送信息到APNs的方法。分享给大家供大家参考。具体实现方法如下:class Program{ public
- 在我们开发SpringBoot后端服务时,一般需要给前端统一响应格式,方便前端调试及配置错误提示等等。这篇文章讲讲实际工作中统一响应格式及统
- Spring数据源的配置数据源(连接池)的作用数据源(连接池)是提高程序性能如出现的事先实例化数据源,初始化部分连接资源使用连接资源时从数据
- Eclipse 最佳字体 推荐:步骤:Eclipse->Windows[窗口]->Preferences[首选项]->Ge
- 背景:在Android中按照数据保存的方式,可以分为如下几种Content Provider (用的SQLite实现),SQLite,Sha
- JSR303简介JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernat