`

利用Apache POI操作Excel文档

    博客分类:
  • java
阅读更多
众所周知,EXCEL是微软 的office套件里的一个产品,使用比较广泛,由于微软产品的特殊性,JAVA标准库里面并没有提供操作EXCEL文档的类,可是在程序开发过程中,如果能将数据输出成一个电子表格的形式,那将有利于用户分析和查看数据.

 虽然标准类库没有提供操作方法,但是得益于JAVA是开源的,所以我们可以找到第三方的开源的类库来进行EXCEL的读写操作.我们选用apache的POI库来进行EXCEL的操作.

 在POI里面,它把很多EXCEL里面的元素都对象化了,很符合的JAVA的编程风格.

 在使用POI之前,我们得下载一个POI的库,我们可以去apache的网站上去下载,目前最新的版本是3.0.1,

下载后,把它加入到 classpath中就可以使用它了.

下面我们就来看一下最简单的一个例子,生成我们第一个EXCEL文档.
  1. /*
  2. * Test2.java
  3. *
  4. * To change this template, choose Tools | Template Manager
  5. * and open the template in the editor.
  6. */

  7. package test1;

  8. import java.io.FileOutputStream;
  9. import org.apache.poi.hssf.usermodel.HSSFCell;
  10. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  11. import org.apache.poi.hssf.usermodel.HSSFFont;
  12. import org.apache.poi.hssf.usermodel.HSSFRichTextString;
  13. import org.apache.poi.hssf.usermodel.HSSFRow;
  14. import org.apache.poi.hssf.usermodel.HSSFSheet;
  15. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  16. import org.apache.poi.hssf.util.HSSFColor;

  17. /**
  18. *
  19. * @author hadeslee
  20. */
  21. public class Test2{
  22.  
  23.   /** Creates a new instance of Test2 */
  24.   public Test2() {
  25.   }
  26.   public static void main(String[] args)throws Exception {
  27.       //声明一个工作薄
  28.       HSSFWorkbook wb=new HSSFWorkbook();
  29.       //生成一个表格
  30.       HSSFSheet sheet=wb.createSheet("表格1");
  31.       //生成一个列
  32.       HSSFRow row=sheet.createRow(0);
  33.       //生成一个样式
  34.       HSSFCellStyle style=wb.createCellStyle();
  35.       //设置这些样式
  36.       style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
  37.       style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  38.       style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  39.       style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  40.       style.setBorderRight(HSSFCellStyle.BORDER_THIN);
  41.       style.setBorderTop(HSSFCellStyle.BORDER_THIN);
  42.       style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  43.       //生成一个字体
  44.       HSSFFont font=wb.createFont();
  45.       font.setColor(HSSFColor.VIOLET.index);
  46.       font.setFontHeightInPoints((short)16);
  47.       font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  48.       //把字体应用到当前的样式
  49.       style.setFont(font);
  50.       //填充单元格
  51.       for(short i=0;i<5;i++){
  52.           //声明一个单元格
  53.           HSSFCell cell=row.createCell(i);
  54.           //设置单元格的字符值
  55.           cell.setCellValue(new HSSFRichTextString("第"+i+"列"));
  56.           //设置单元格的样式
  57.           cell.setCellStyle(style);
  58.       }
  59.       FileOutputStream fout=new FileOutputStream("我的第一个EXCEL.xls");
  60.       //输出到文件
  61.       wb.write(fout);
  62.       fout.close();
  63.   }
  64. }

这个例子比起别的入门例子,可能会复杂一些,因为里面应用到了样式和字体,但是这些对于我们美化EXCEL是

很重要的,EXCEL里面大部份都是插入字符串,但是我们也可以插入图片或者图形或者格式化的日期以及时
间,至于如何插入这些,我们下次再讲.:)

昨天,我们看了一下POI操作EXCEL的简单例子,我们只是插入了一些字符串而已,但是现实的应用中,经常需要在EXCEL中插入图片或者图形.这个时候,应该怎么办呢,我们先看一下下面的例子
  1. /*
  2. * Test3.java
  3. *
  4. * To change this template, choose Tools | Template Manager
  5. * and open the template in the editor.
  6. */

  7. package test1;

  8. import java.awt.image.BufferedImage;
  9. import java.io.ByteArrayOutputStream;
  10. import java.io.FileOutputStream;
  11. import java.net.URL;
  12. import javax.imageio.ImageIO;
  13. import org.apache.poi.hssf.usermodel.HSSFCell;
  14. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  15. import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
  16. import org.apache.poi.hssf.usermodel.HSSFFont;
  17. import org.apache.poi.hssf.usermodel.HSSFPatriarch;
  18. import org.apache.poi.hssf.usermodel.HSSFRichTextString;
  19. import org.apache.poi.hssf.usermodel.HSSFRow;
  20. import org.apache.poi.hssf.usermodel.HSSFSheet;
  21. import org.apache.poi.hssf.usermodel.HSSFSimpleShape;
  22. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  23. import org.apache.poi.hssf.util.HSSFColor;

  24. /**
  25. *
  26. * @author hadeslee
  27. */
  28. public class Test3 {
  29.  
  30.   /** Creates a new instance of Test3 */
  31.   public Test3() {
  32.   }
  33.   public static void main(String[] args)throws Exception {
  34.       //声明一个工作薄
  35.       HSSFWorkbook wb=new HSSFWorkbook();
  36.       //生成一个表格
  37.       HSSFSheet sheet=wb.createSheet("表格1");
  38.       //生成一个列
  39.       HSSFRow row=sheet.createRow(0);
  40.       //生成一个样式
  41.       HSSFCellStyle style=wb.createCellStyle();
  42.       //设置这些样式
  43.       style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
  44.       style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  45.       style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  46.       style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  47.       style.setBorderRight(HSSFCellStyle.BORDER_THIN);
  48.       style.setBorderTop(HSSFCellStyle.BORDER_THIN);
  49.       style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  50.       //生成一个字体
  51.       HSSFFont font=wb.createFont();
  52.       font.setColor(HSSFColor.VIOLET.index);
  53.       font.setFontHeightInPoints((short)16);
  54.       font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  55.       //把字体应用到当前的样式
  56.       style.setFont(font);
  57.       //声明一个画图的顶级管理
  58.       HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
  59.       //填充单元格
  60.       for(short i=0;i<5;i++){
  61.           //声明一个单元格
  62.           HSSFCell cell=row.createCell(i);
  63.           switch(i){
  64.               case 0:
  65.                   //设置普通文本
  66.                   cell.setCellValue(new HSSFRichTextString("普通文本"));
  67.                   break;
  68.               case 1:
  69.                   //设置为形状
  70.                   HSSFClientAnchor a1 = new HSSFClientAnchor( 0, 0, 1023, 255, (short) 1, 0, (short) 1, 0 );
  71.                   HSSFSimpleShape shape1 = patriarch.createSimpleShape(a1);
  72.                   //这里可以设置形状的样式
  73.                   shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL);
  74.                   
  75.                   break;
  76.               case 2:
  77.                   //设置为布尔量
  78.                   cell.setCellValue(true);
  79.                   break;
  80.               case 3:
  81.                   //设置为double值
  82.                   cell.setCellValue(12.5);
  83.                   break;
  84.               case 4:
  85.                   //设置为图片]
  86.                   URL url=Test3.class.getResource("hello.jpg");
  87.                   insertImage(wb,patriarch,getImageData(ImageIO.read(url)),0,4,1);
  88.                   break;
  89.                   
  90.           }
  91.           
  92.           //设置单元格的样式
  93.           cell.setCellStyle(style);
  94.       }
  95.       FileOutputStream fout=new FileOutputStream("我的第一个EXCEL.xls");
  96.       //输出到文件
  97.       wb.write(fout);
  98.       fout.close();
  99.   }
  100.   //自定义的方法,插入某个图片到指定索引的位置
  101.   private static void insertImage(HSSFWorkbook wb,HSSFPatriarch pa,byte[] data,int row,int column,int index){
  102.       int x1=index*250;
  103.       int y1=0;
  104.       int x2=x1+255;
  105.       int y2=255;
  106.       HSSFClientAnchor anchor = new HSSFClientAnchor(x1,y1,x2,y2,(short)column,row,(short)column,row);
  107.       anchor.setAnchorType(2);
  108.       pa.createPicture(anchor , wb.addPicture(data,HSSFWorkbook.PICTURE_TYPE_JPEG));
  109.   }
  110.   //从图片里面得到字节数组
  111.   private static  byte[] getImageData(BufferedImage bi){
  112.       try{
  113.           ByteArrayOutputStream bout=new ByteArrayOutputStream();
  114.           ImageIO.write(bi,"PNG",bout);
  115.           return bout.toByteArray();
  116.       }catch(Exception exe){
  117.           exe.printStackTrace();
  118.           return null;
  119.       }
  120.   }
  121. }

POI里面处理图形或者图片的主要类是HSSFPatriarch,它负责管理一个表格里面所有的图片和图形,并且只能创建一个,如果你应用程序后来又创建了一个,那么将使以前创造的HSSFPatriarch所管理的图片和图形清除,所以一定要保留HSSFPatriarch的引用直到最后.
分享到:
评论

相关推荐

    Apache poi 操作 excel 文件压缩包

    Apache poi 操作 excel 文件压缩包,亲测可用

    Apache POI Excel操作

    Apache POI Excel操作 需要的文档,.介绍,相关jar包,maven中的配置等,比较全面

    apache POI文件读写excel

    apache POI,文件读写 ,excel 对于使用apache poi 解析微软excel的一些文件

    Apache POI HSSF读写Excel

    自己花了几天时间写的基于Apache POI的Java 读取excel文件,功能还是比较齐全

    Apache POI导入和导出Excel文件.

    Apache POI导入和导出Excel文件

    java后台利用Apache poi 生成excel文档提供前台下载示例

    本篇文章主要介绍了java后台利用Apache poi 生成excel文档提供前台下载示例,非常具有实用价值,需要的朋友可以参考下

    Apache POI库jar文件

    Apache POI库是一个开源的Java库,可以帮助开发人员处理Microsoft Office格式的文档,例如Word文档、Excel电子表格和PowerPoint演示文稿等。以下是Apache POI库的详细介绍: 支持多种Office格式:Apache POI库支持...

    使用ITEXT导出PDF、WORD,APACHE POI导出EXCEL报表文件

    NULL 博文链接:https://keep-going.iteye.com/blog/1907664

    java POI读取Excel文件基本用法Demo

    本案例中利用Apache Poi读取Excel用法,源码注释详细基本用法!

    POI使用Excel模板文件循环输出行并导出Excel

    POI使用excel模板循环输出行到文件并导出的一个小例子

    apache poi 读取Excel文件内容(2003,2007)

    NULL 博文链接:https://wxb-j2ee.iteye.com/blog/1489526

    java excel操作 poi-3.17 可用于jdk1.70

    附件是java poi 3.17的lib库及其依赖库,全部下载引用后,可以进行excel的读写操作,无需引用其他lib库。poi-3.17适用于jdk1.7。 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft ...

    apache.poi所需要的jar包集合

    版本:4.1.0 jar包个数:7个 apache的poi,操作Excel的包,亲测 jdk11 maven项目环境下包含本地jar使用有效,并给出了简单易用的封装。 传送门:我的博文:基于poi4.1.0的Excel表读写操作 日期:2020.12.15日

    Apache poi - java对Office操作

    Apache poi 是Apache在java与Office相关文档进行交互操作的一个开源包 可以轻松的能过java与word或excel进行操作

    Apache POI教程

    Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS ...

    Apache POI 导出Excel工具类的实现,超简单实用

    Apache POI 导出EXCEL的封装实现工具类,超简单的调用方式,有说明文档示例参考,一看便懂,将繁琐变为简单,是我们一直追求的脚步……

    POI操作Excel常用方法总结.docx

    三、 POI EXCEL文档结构类 HSSFWorkbook excel文档对象 HSSFSheet excel的sheet HSSFRow excel的行 HSSFCell excel的单元格 HSSFFont excel字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader sheet头...

    apache POI 3.12 API (CHM格式)

    Apache POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目 从之前发布其他chm文件下载用户的反映看,有不少朋友反映下载后打开无法显示,这一般不是chm文件的问题,这里统一说明一下解决办法: 如果文件...

    apache poi-3.15包

    Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和...

    用poi创建Excel文件

    import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFCell; import ...

Global site tag (gtag.js) - Google Analytics