`

利用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库的多个版本及其依赖库,如ooxml-schemas、xmlbeans等,用于支持对Excel文件的OOXML(Office Open XML)格式的操作。 1. **Apache POI API**: POI API 提供了HSSF和XSSF两个主要组件。...

    Apache POI Excel操作

    总结,Apache POI为Java开发者提供了强大的Excel操作工具,通过理解并熟练掌握其核心概念、API和使用方法,可以轻松地在Java应用中实现Excel文件的读写和处理。在实际项目中,根据需求选择合适的API,配合Maven配置...

    apache POI文件读写excel

    Apache POI是Java领域中广泛使用的库,专为处理Microsoft Office格式的文件而设计,特别是Excel文档。这个库使得在不依赖Microsoft Office的情况下,开发者能够读取、创建、修改和操作XLS、XLSX等Excel文件。在本文...

    Apache POI for Android

    在Android开发中,Apache POI 提供了处理Excel文件的能力,使得开发者可以在Android设备上进行Excel的读写操作,无需依赖微软的软件环境。这个库简化了与Excel数据交互的过程,使得在移动应用中处理数据变得更加便捷...

    Apache POI库jar文件

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

    Apache Poi Excel导出

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel。在Java开发中,Apache POI 提供了一种高效且灵活的方式来创建、修改和读取Excel工作簿。这篇博客“Apache Poi Excel导出”可能详细...

    apache poi 导出excel、word

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel和Word。它提供了Java API,使得开发者能够方便地在Java应用程序中创建、修改和读取这些文件。以下是对Apache POI的一些关键知识点的...

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

    本文将深入探讨如何使用ITEXT库导出PDF和Word,以及利用Apache POI库导出Excel报表文件。 首先,让我们来了解ITEXT库。ITEXT是一个开源Java库,专门用于创建和修改PDF文档。使用ITEXT,你可以方便地生成包含文本、...

    POI操作Excel完美生成水印

    本教程将深入探讨如何利用Apache POI来在Excel文件中完美地生成水印。水印通常用于标识文档的所有权或提供额外的安全层,而这里的水印是通过将文字转化为图片再添加到Excel工作表中实现的。 首先,我们需要了解...

    Apache POI 模板导出excel.rar

    综上所述,"Apache POI 模板导出excel.rar"中的内容主要涵盖了使用Apache POI库处理Excel模板,填充数据并导出报表的整个流程,涉及到了文件操作、数据处理、样式控制、性能优化等多个方面的技术知识。通过理解和...

    利用Java Apache POI 生成Word文档示例代码

    "利用Java Apache POI 生成Word文档示例代码" 本篇文章主要介绍了利用Java Apache POI 生成Word文档示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 首先,Apache POI是一个开源的Java库,由Apache...

    利用apache的poi上传excel

    标题中的“利用apache的poi上传excel”指的是使用Apache POI库来处理Microsoft Excel文件的Java编程实践。Apache POI是一个开源项目,它提供了API来读取、写入和修改MS Office格式的文件,包括Excel(XLS和XLSX)。 ...

    Apache poi 导出excel实例

    通过Apache POI,开发者可以充分利用Java的强大功能来处理Excel文件,无论是生成报表、数据分析还是数据交换,都能提供极大的便利。博客文章“Apache POI 导出excel实例”应该会详细介绍这些步骤,并可能提供更具体...

    apache POI 导出Excel 设置打印

    在Java开发中,Apache POI 提供了API,使我们能够创建、修改和读取Excel文档。当我们需要导出Excel并设置打印参数时,Apache POI 提供了丰富的功能。 1. **创建Excel工作簿和工作表** 在使用Apache POI导出Excel时...

    POI导出Excel文件

    Apache POI是一个流行的Java库,用于读取和写入Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。这个实例提供了两种方法来导出Excel文件:通过Servlet和通过main方法。这两种方法都是在Java环境中操作...

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

    在Java编程中,Apache POI 提供了丰富的API,使得开发者可以方便地操作Excel文件。首先,我们需要添加Apache POI的依赖到项目中。如果是Maven项目,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;org....

    Apache POI资源包

    Apache POI是一个开源项目,由Apache软件基金会维护,专门用于处理Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)、PowerPoint(.ppt/.pptx)等。这个资源包是Java开发者在跨平台上读取、...

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

    Java 后台利用 Apache POI 生成 Excel 文档提供前台下载示例 本篇文章主要介绍了 Java 后台利用 Apache POI 生成 Excel 文档提供前台下载示例,非常具有实用价值。下面是文章的详细解释: Apache POI 简介 Apache...

    poi 操作excel模板

    本篇将深入探讨如何利用Apache POI来操作Excel模板,以及如何读取数据并将其填充到新生成的文件中,最终提供下载。 首先,你需要在项目中引入Apache POI的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下...

    POI读写excel文件+poi简单文档

    在这个“POI读写excel文件+poi简单文档”中,我们将深入探讨如何利用Apache POI进行Excel文件的读写操作。 首先,我们需要了解POI的主要组件:HSSF(Horrible Spreadsheet Format)用于处理旧版的BIFF格式(.xls)...

Global site tag (gtag.js) - Google Analytics