当前位置:文档之家› 如何利用poi

如何利用poi

如何利用poi
如何利用poi

POI 与Microsoft Office

1. POI 简介

POI 是Apache 下的Jakata 项目的一个子项目,主要用于提供java 操作Microsoft

Office 办公套件如Excel,Word,Powerpoint 等文件的API.

微软的Office 办公软件在企业的日常办公中占据着重要的地位,人们已经非常熟悉Office 的使用。在我们开发的应用系统中,常常需要将数据导出到Excel 文件中,或者Word 文件中进行打印。比如移动的话费查询系统中就提供了将话费清单导入到excel 表格中的功能。这样在web 应用中,我们在浏览器中看到的数据可以被导出到Excel 中了。

?Excel 文件: xls 格式文件对应POI API 为HSSF 。xlsx 格式为office 2007 的文件格式,POI 中对应的API 为XSSF

?Word 文件:doc 格式文件对应的POI API 为HWPF。docx 格式为XWPF ?powerPoint 文件:ppt 格式对应的POI API 为HSLF。pptx 格式为XSLF ?outlook :对应的API 为HSMF

?Visio: 对应的API 为HDGF

?Publisher : 对应的API 为HPBF

下面主要介绍如何操作Excel。

回到顶部

2. 下载POI

到apache 官方网站下载POI 的jar 包

回到顶部3. Excel 文件的结构

一个Excel 文档称为工作簿(worksheet),一个工作簿包含多个工作表(sheet),每个工作表看起来像一张二维表格,由很多行(row)组成,每行由多个单元格组成(cell).

下面是POI HSSF API 中的类与Excel 结构的对应关系:

回到顶部4. 创建空的Excel 文件

新建java项目,导入jar文件

4.1 创建空的xls 文件

创建的xls 文件用excel 打开的时候报错,因为这个Excel 文件结构不完整。

4.2 创建空的xlsx 文件

xlsx 文件是office2007 文件格式,这种文件格式是基于xml 的,所以需要在项目中加

入xml 文件解析的jar 包。如图,jar包在poi 发行包中能够找到

同样道理,因为xlsx 文件信息不完整,所以用Excel 打开的时候出现错误

回到顶部5. 创建工作表

在前面创建的工作簿(WorkBook)的基础之上创建工作表

创建结果:

回到顶部6. 创建行数据

执行后的结果:

可以看到日期有一些问题。代码中使用的是”new Date()”,需要做一些转换。

这个创建好的格式可以反复使用。

回到顶部

7. 单元格对其方式

HSSFCellStyle 中定义了一些对齐方式

为了方便操作,定义一个创建单元格的方法。

调用它创建单元格:

更多单元格,样式属性方法请参阅发行文档API

回到顶部8. 合并单元格

先设置好单元格,然后调用工作表的addMergedRegion 方法合并单元格

结果:

Ok,大功告成!!

使用POI 操作PPT 文档

1)如果是创建新的PPT 文档,直接使用SlideShow 和Slide 类就可以,其中SlideShow 表示PPT 文档,Slide 表示某一张幻灯片 如下代码创建空的PPT 文档: ?

1 2 3 4 SlideShow ppt = new SlideShow();Slide[] slides = ppt.getSlides();assertTrue(s FileOutputStream out = new FileOutputStream(\"ppt 测试.ppt\"); ppt.write(out); out.close();}

2)设置母版,这样后续的新建幻灯片都将使用母版的字体,背景等设置 ?

1 2 SlideShow ppt = new SlideShow();//设置幻灯片大小ppt.setPageSize(new Dimension(种图片格式int picIndex = ppt.addPicture(new File(\"background.png\"), Picture.background.setAnchor(new java.awt.Rectangle(0, 0, ppt.getPageSize().width

3)创建幻灯片并插入文本 ?

1 2 SlideShow ppt = new SlideShow();Slide newSlide = ppt.createSlide(); //添加幻TextBox title = newSlide.addTitle();RichTextRun titleRun = title.getTextRun().框TextBox txt = new TextBox();RichTextRun richTextRun = txt.getTextRun().get 符,但是最后一行不能以\\r\\n 结尾,否则设置的格式没有效果(v3.5)richTextRun.setText(\"这\"); txt.setAnchor(new java.awt.Rectangle(50,150,400,400));newSlide.addShape savePPTFile(ppt);

4)插入图片,支持多种格式 ?

1

2

SlideShow ppt = new SlideShow();Slide newSlide = ppt.createSlide();int picIn 片.jpg\"), Picture.JPEG);Picture jpg = new Picture(picIndex); //set image po newSlide.addShape(jpg);savePPTFile(ppt);

5)插入表格(v3.5)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

String[][] {\"序号\", \"姓名\",\"年龄\"}, {\"1\", \"张三\",\"30\"}, {\\",\"27\"},}; //create a table of 3 rows and 3 columnsTable table = new for (int j = 0; j < datas[i].length; j++) { TableCell cell = table.getCell(i, j); RichTextRun rt = cell.getTextRun().getRichTextRuns()[0]; rt.setFontName(\"宋体\"); rt.setFontSize(12); cell.setVerticalAlignment(TextBox.AnchorMiddle); cell.setHorizontalAlignment(TextBox.AlignCenter); cell.setText(datas[i][j]); if(i == 0){//首行背景 cell.setFillColor(Color.GRAY); } }} Line border = table.createBorder();border.setLineColor(Color.black);slide.addShape(table);table.moveTo(160,260);savePPTFile(ppt);

6)如果是读取已存在的PPT 文档则还要用到HSLFSlideShow,下面代码将PPT 文件导出为图片(png)格式,如果幻灯片上有中文字符则这些字符的字体需要修改为支持中文的字体(宋体等),否则导出的图片的中文字符不能正常显示 ?

1

2

3

4

5

6

7

8

9

10

SlideShow ppt = new SlideShow(new HSLFSlideShow(\"PPT 测试.ppt\"));Dimension pgsize = ppt.getPageSize();Slide[] slide = ppt.getSlides BufferedImage img = new BufferedImage(pgsize.width, pgsize.height Graphics2D graphics = img.createGraphics(); //clear the drawing area graphics.setPaint(Color.white); graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height)) slide[i].draw(graphics); FileOutputStream out = new FileOutput javax.imageio.ImageIO.write(img, \"png\", out); out.close();}

7)提取PPT 文档信息 ?

1 2 SlideShow ppt = new SlideShow(new HSLFSlideShow(\"PPT 测试.ppt\"));Slide[] 息 for (Slide each : slides) {

3 4 5 6 7 8 9 10 11 12 13 14 15

System.out.println(each.getTitle()) ;

TextRun[] textRuns = each.getTextRuns();

for (int i=0 ;i< textRuns.length; i++ ) { System.out.println(textRuns[i].getText());

RichTextRun[] richTextRuns = textRuns[i].getRichTextRuns(); for (int j = 0; j < richTextRuns.length; j++) { System.out.println(richTextRuns[j].getText()); }

}}//提取所有JPEG 图片PictureData[] picDatas = ppt.getPictureData();f if(picDatas[i].getType() == Picture.JPEG){

FileOutputStream out = new FileOutputStream(\"jpg_\" + i ppt.write(out); out.close(); }}

8)设置PPT 文档摘要信息(文档点击鼠标右键查看属性) ?

1 2 3 HSLFSlideShow hslf = HSLFSlideShow.create();DocumentSummaryInformation dsi= hsl dsi.setCompany(\"yourCompany\"); dsi.setCategory(\"ppt 测试\"); si.setAuthor SlideShow ppt = new SlideShow(hslf);savePPTFile(ppt);

POI 处理Word 、Excel 、PowerPoint 简单例子

第一:下载POI ,在https://www.doczj.com/doc/c615538530.html,/poi/中,下载poi-bin-3.5-beta4-20081128.zip ,解压后把jar 包引入项目工程。

第二:处理Word (Word.java )

import org.apache.poi.hwpf.extractor.WordExtractor; import java.io.File;

import java.io.InputStream;

publicclass Word {

publicstaticvoid main(String[] args)throws Exception {

System.out.println(getContent("c://11.doc"));

}

publicstatic String getContent(String s)throws Exception {

return getContent(new java.io.FileInputStream(s));

}

publicstatic String getContent(File f)throws Exception {

return getContent(new java.io.FileInputStream(f));

}

publicstatic String getContent(InputStream is)throws Exception { String bodyText = null;

WordExtractor ex = new WordExtractor(is);

bodyText = ex.getText();

return bodyText;

}

第三:处理Excel(Excel.java)

import https://www.doczj.com/doc/c615538530.html,ermodel.HSSFDateUtil; import https://www.doczj.com/doc/c615538530.html,ermodel.HSSFWorkbook; import https://www.doczj.com/doc/c615538530.html,ermodel.HSSFSheet;

import https://www.doczj.com/doc/c615538530.html,ermodel.HSSFRow;

import https://www.doczj.com/doc/c615538530.html,ermodel.HSSFCell;

import java.io.File;

import java.io.InputStream;

import java.text.SimpleDateFormat;

import java.util.Date;

publicclass Excel {

publicstaticvoid main(String[] args)throws Exception {

System.out.println(getContent("c://22.xls"));

}

publicstatic String getContent(String s)throws Exception { return getContent(new java.io.FileInputStream(s));

publicstatic String getContent(File f)throws Exception {

return getContent(new java.io.FileInputStream(f));

}

publicstatic String getContent(InputStream is)throws Exception {

StringBuffer content = new StringBuffer();

HSSFWorkbook workbook = new HSSFWorkbook(is);

for(int numSheets = 0; numSheets

HSSFSheetaSheet = workbook.getSheetAt(numSheets);//获得一个sheet

content.append("/n");

if(null== aSheet) {

continue;

}

for(int rowNum = 0; rowNum<= aSheet.getLastRowNum(); rowNum++) { content.append("/n");

HSSFRowaRow = aSheet.getRow(rowNum);

if(null== aRow) {

continue;

}

for(short cellNum = 0; cellNum<= aRow.getLastCellNum(); cellNum++) {

HSSFCellaCell = aRow.getCell(cellNum);

if(null== aCell) {

continue;

}

if(aCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {

content.append(aCell.getRichStringCellValue()

.getString());

} elseif(aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {

boolean b = HSSFDateUtil.isCellDateFormatted(aCell);

if(b) {

Date date = aCell.getDateCellValue();

SimpleDateFormatdf =new SimpleDateFormat(

"yyyy-MM-dd");

content.append(df.format(date));

}

}

}

}

return content.toString();

}

}

第四:处理PowerPoint(PowerPoint.java)

import java.io.File;

import java.io.InputStream;

import org.apache.poi.hslf.HSLFSlideShow;

import org.apache.poi.hslf.model.TextRun;

import org.apache.poi.hslf.model.Slide;

import https://www.doczj.com/doc/c615538530.html,ermodel.SlideShow;

publicclass PowerPoint {

publicstaticvoid main(String[] args)throws Exception {

System.out.println(getContent("c://33.ppt"));

}

publicstatic String getContent(String s)throws Exception { return getContent(new java.io.FileInputStream(s));

publicstatic String getContent(File f)throws Exception {

return getContent(new java.io.FileInputStream(f));

}

publicstatic String getContent(InputStream is)throws Exception { StringBuffer content = new StringBuffer("");

SlideShowss = new SlideShow(new HSLFSlideShow(is));

Slide[] slides = ss.getSlides();

for(int i = 0; i

TextRun[] t = slides[i].getTextRuns();

for(int j = 0; j

content.append(t[j].getText());

}

content.append(slides[i].getTitle());

}

return content.toString();

}

}

java 读取2003 ppt 和2007 pptx ?

1 2 3 4 5 6 7 8 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35 import java.io.IOException;

import org.apache.poi.hslf.HSLFSlideShow;

import org.apache.poi.hslf.model.Slide;

import org.apache.poi.hslf.model.TextRun;

import https://www.doczj.com/doc/c615538530.html,ermodel.SlideShow;

import org.apache.poi.openxml4j.exceptions.OpenXML4JException;

import org.apache.poi.xslf.XSLFSlideShow;

import https://www.doczj.com/doc/c615538530.html,ermodel.XMLSlideShow;

import https://www.doczj.com/doc/c615538530.html,ermodel.XSLFSlide;

import org.apache.xmlbeans.XmlException;

import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun;

import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;

import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;

import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape;

import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;

import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide;

public class PptReader {

/**

* @paramargs

*/

public static String getTextFromPPT2003(String path) {

StringBuffer content = new StringBuffer("");

try {

SlideShowss = new SlideShow(new HSLFSlideShow(path));//立SlideShow

Slide[] slides = ss.getSlides();// 获得每一张幻灯片

for (inti = 0; i

TextRun[] t = slides[i].getTextRuns();// 为了取得TextRun

for (int j = 0; j

content.append(t[j].getText());// 这里会

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

}

content.append(slides[i].getTitle());

}

} catch (Exception e) {

System.out.println(e.toString());

}

return content.toString();

}

public static String getTextFromPPT2007(String path) {

XSLFSlideShowslideShow;

String reusltString=null;

try {

slideShow = new XSLFSlideShow(path);

XMLSlideShowxmlSlideShow = new XMLSlideShow(slideShow);

XSLFSlide[] slides = xmlSlideShow.getSlides();

StringBuildersb = new StringBuilder();

for (XSLFSlide slide : slides) {

CTSliderawSlide = slide._getCTSlide();

CTGroupShapegs = rawSlide.getCSld().getSpTree();

CTShape[] shapes = gs.getSpArray();

for (CTShape shape : shapes) {

CTTextBodytb = shape.getTxBody();

if (null == tb)

continue;

CTTextParagraph[] paras = tb.getPArray()

for (CTTextParagraphtextParagraph : para

CTRegularTextRun[] textRuns = te

for (CTRegularTextRuntextRun : t

sb.append(textRun.getT()

}

}

}

}

reusltString=sb.toString();

} catch (OpenXML4JException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (XmlException e) {

// TODO Auto-generated catch block

百度地图全国poi数据(地图数据)问题

全国poi数据的应用与技术解决方案 众说周知,POI数据是对于LBS是立足之本,与定位、地图用有同等重要的地位,对于互联网企业,他一头连着消费者,一头连着商家。对于消费者通过互联网企业的地图服务找到想要的POI数据,对于商家通过在互联网企业做广告,让自己在搜索结果中排名靠前,或占据广告位置,对于互联网企业通过收取广告费用来盈利,google的位置业务在下一盘很大棋啊,高德的POI 数据经营模式也呼之欲出了, 看完别人的再来看咱自己的,咱自己的POI数据主要来自购买基础地图时附带的一部分基础POI数据以及单独购买的POI数据,POI数据很贵的,据说一条一块,(高德已经有2000万条了,就只2000万啊),花钱刚刚的,不眨眼啊!而且没有点评类的深度信息,我们是不是也应该向高德学习,发挥我们的优势, 一、建立增值POI平台,进行数据商业化运营、开辟数据获取渠道: 二、通过广大的集客客户来收集POI数据,丰富我们的POI数据, 三、把12580里的黄页信息整理,与POI数据库融合,也是很好的路子。 四、引入爬取方式(由增值POI平台厂家整合其他专业厂家的现有成熟技术); 五、UGC(由增值POI平台开放用户上传接口,并进行数据审核与过滤); 六、基层业务人员扫街 最新mapabc全国兴趣点、商户数据、poi数据,一共1490多万条,包含地址、电话、经纬度、类别,CSV格式,免费更新,目前基本上是每半年更新一次! 最新百度poi数据:全国超过2000万条,免费更新 数据格式如下: Mapabc数据格式

百度地图poi数据格式 现在已经成功获取了以下数据库: 纠偏数据库(google地图) 精度为0.01:经纬度每变化0.01,取一次偏移值,共980万条,access文件约600mb,误差5~10米。 精度为0.001:经纬度每变化0.001,取一次偏移值,共9亿条,csv文件共20gb,误差约2米。 百度地图纠偏数据库:精度0.01,共2800万条 全国商户数据poi mapabc地图全国兴趣点poi商户数据共1500多万条,包含地址、电话、经纬度、类别,CSV格式。 百度poi,全国2000万条以上 更加详细的内容可以查看新浪博客:https://www.doczj.com/doc/c615538530.html,/u/2928794464

POI数据处理技术需求

POI数据处理技术需求 一、mapinfo的技术需求: 在mapinfo亲自试作业和培训过程中,发现对于一些命令条件的输入比较费解,尤其是对于不会电脑编程言语的作业人员来说,更是比较头痛的事情。现提出技术开发需求如下: 1、信息点检查技术需求: 在查找漏点、多点匹配和重复点的检查过程中,希望技术方面能够开发设计一个直观的界面,进行检查。原来是黄坚开发一个匹配检查工具,但不稳定基本上没有使用,而中大的GIS学生也做了一个设计,但因为技术不太熟悉,没有完善好(具体他设计的见附件。)这需要公司GIS二次开发的技术人员解决这个问题。即把那些SQ语句L封装到MapInfo中,这样查漏电和重复点等都会变的很简单的。 具体要解决的问题和涉及的语句,见“打点画路作业手册(第四版)200803.doc”的“2.4.3.2”。 ——xxxx已经在4月解决! 2、绘制信息点过程关于主体点、拖点的绘制技术需求: 1)主子体点的捕捉绘制: 见“打点画路作业手册(第四版)200803.doc”的“2.4.2.1”。 2)拖点绘制: 有方向感的平均绘制;无方向感的紧密排列。 见“打点画路作业手册(第四版)200803.doc”的“2.4.2.2”。 ————xxxx已经在4月和5月解决! 3、打点作业素描技术的技术需求: 通过购买一台像素够高的专业相机,将地图正面清晰拍摄出来,给作业人员直接用mapinfo 素描,但需要增加一个技术就是需要作业人员自己配准。这样,将加快作业速度和质检速度。 ——已经提出高像素相机购买的申请。(目前广州的外包团队自己拍照了) 4、mapinfo自动统计合格率的技术需求: 只要检查中有移动的点位,mapinfo会自动记录和统计,最后计算成合格率。 ——已经和xxx探讨在7月开发 5、IDNUM自动写入生成的需求: 目前xxxx在探索,估计比较难解决。 ——已经和xxx探讨在7月开发 6、在各层表结构中自动更新增加图幅号: 包括手画路、路口关系点、公交地铁点、信息点都有在表结构最后列中,自动对应的填充图幅 号。 目前已经有这个简化工具,但希望在简化成为一个按钮工具。 7、表结构自动检查工具: 很多作业员为了方便绘制观看,私下增加了一些表结构,导致表结构不准确。希望开发一个各 图层表结构检查的工具,可以及时发现不符合规则的结构填写的问题。

poi根据excel模板文件导出数据

1.import java.io.File; 2.import java.io.FileInputStream; 3.import java.io.FileNotFoundException; 4.import java.io.FileOutputStream; 5.import java.io.IOException; 6.import java.util.Calendar; 7.import java.util.Date; 8. 9.import https://www.doczj.com/doc/c615538530.html,ermodel.HSSFCell; 10.import https://www.doczj.com/doc/c615538530.html,ermodel.HSSFSheet; 11.import https://www.doczj.com/doc/c615538530.html,ermodel.HSSFWorkbook; 12.import org.apache.poi.poifs.filesystem.POIFSFileSystem; 13.import https://www.doczj.com/doc/c615538530.html,ermodel.RichTextString; 14./** 15. * 共分为六部完成根据模板导出excel操作:
16. * 第一步、设置excel模板路径(setSrcPath)
17. * 第二步、设置要生成excel文件路径(setDesPath)
18. * 第三步、设置模板中哪个Sheet列(setSheetName)
19. * 第四步、获取所读取excel模板的对象(getSheet)
20. * 第五步、设置数据(分为6种类型数据:setCellStrValue、setCellDateValue、 setCellDoubleValue、setCellBoolValue、setCellCalendarValue、 setCellRichTextStrValue)
21. * 第六步、完成导出(exportToNewFile)
22. * 23. * @author Administrator 24. * 25. */ 26.public class ExcelUtil { 27.private String srcXlsPath = "";// // excel模板路径 28.private String desXlsPath = ""; 29.private String sheetName = ""; 30. POIFSFileSystem fs = null; 31. HSSFWorkbook wb = null; 32. HSSFSheet sheet = null; 33. 34./** 35. * 第一步、设置excel模板路径 36. * @param srcXlsPath 37. */ 38.public void setSrcPath(String srcXlsPath) { 39.this.srcXlsPath = srcXlsPath; 40. } 41. 42./**

相关主题
文本预览
相关文档 最新文档