首页 > 学院 > 开发设计 > 正文

POI-Microsoft Office读写支持

2019-11-15 00:00:12
字体:
来源:转载
供稿:网友
POI-Microsoft Office读写支持

最近做一个小项目,中间有一个环节是将集合里的数据保存到本地Excel文件中、将本地Excel文件读取到集合里面

POI’

  简单说一下吧:POI是apache提供的,对Microsoft Office格式的文档提供读写支持!

  • HSSF - 提供读写Microsoft Excel格式档案的功能。
  • XSSF - 提供读写MicrosoftExcelOOxml格式档案的功能。
  • HWPF - 提供读写Microsoft Word格式档案的功能。
  • HSLF - 提供读写Microsoft Powerpoint格式档案的功能。
  • HDGF - 提供读写Microsoft Visio格式档案的功能。
    要对Excel进行读取,首先得下载架包:poi-**-**.jar    以项目中我遇到的两个业务为例:  1、将数据导入Excel  
 1 ** 2  * excel 工具类 3  * 提供:导入Excel 和 导出Excel方法  4  * @author Marvel 5  * 6  */ 7 public class ExcelTool { 8     PRivate static HSSFCell cell; //列 9     private static HSSFWorkbook hwb; //Excel对象10     private static HSSFSheet sheet; //工作夹11     private static HSSFRow row; //行12     13     14     /**15      * 导入Excel16      * @param strs 标题17      * @param list 集合18      * @param path 保存路径/文件名.xls19      * @throws Exception20      */21     public static Integer ToExcel(List<Object[]> list,String path) throws Exception{22         //创建Excel文档、此时内容在内存中23         hwb=new HSSFWorkbook();24         //sheet 对应创建一个工作夹;25         sheet=hwb.createSheet("debug.factory");26         //打印行27         for(int i=0;i<list.size();i++){28             //创建一行29             row=sheet.createRow(i);30             //得到一行数据31             Object []objs=(Object[])list.get(i);32             //打印列33             for(int a=0;a<objs.length;a++){34                 //创建一列35                 cell= row.createCell(a);36                 //设值37                 cell.setCellValue(objs[a].toString());38             }39         }40         // 创建文件输出流,准备输出电子表格41         OutputStream out = new FileOutputStream(path);42         hwb.write(out);43         out.close();44         return hwb.getSheetAt(0).getLastRowNum();45     }46 }

测试代码:

 1 package com.dev4j.debug.test; 2  3 import static org.junit.Assert.*; 4  5 import java.util.ArrayList; 6 import java.util.List; 7  8 import org.junit.Before; 9 import org.junit.Test;10 11 import com.dev4j.debug.tool.ExcelTool;12 13 /**14  * 15  * @author Marvel16  *17  */18 public class ExcelToolTest {19     20     21     @Test22     public void testToExcel() throws Exception {23         List<Object[]> objs=new ArrayList<Object[]>();24         Object []obj=new Object[]{"张三","18","男"}; 25         objs.add(new Object[]{"姓名","年龄","性别"});26         objs.add(obj);27         28         //因为getLastRowNum();返回的是最后一行数据的下标,0开始的,所以这里返回下标为129         assertEquals((long)1,(long)ExcelTool.ToExcel(objs, "E://test2.xls"));30     }31 32 }

2、导出Excel并且追加记录

 1 /** 2      * 共同需要的 3      * @param lists 4      */ 5     public static void write(Integer startRow,List<Object[]> lists){ 6         for(int i=0;i<lists.size();i++){ 7             //创建一行 8             row=sheet.createRow(startRow+i); 9             //得到一行数据10             Object []objs=(Object[])lists.get(i);11             //打印列12             for(int a=0;a<objs.length;a++){13                 //创建一列14                 cell= row.createCell(a);15                 //设值16                 cell.setCellValue(objs[a].toString());17             }18         }19         20     }21     22     23     24     /**25      * 打开文件并追加记录26      * @param list27      * @param path28      * @return29      * @throws Exception30      */31     public static Integer appendExcel(List<Object[]> list,String path) throws Exception{32         //input流加载33         InputStream is = new FileInputStream(path);34         //创建hwb对象35         hwb = new HSSFWorkbook(is);36         //记录下最后一行记录下标,+1更新下一行写入下标37         int lastRow=hwb.getSheetAt(0).getLastRowNum()+1;38         //循环创建39         write(lastRow,list);40         // 创建文件输出流,准备输出电子表格41         OutputStream out = new FileOutputStream(path);42         hwb.write(out);43         out.close();44         return hwb.getSheetAt(0).getLastRowNum();45     }

之前写的代码里面有重复的代码段,提取出来,写成write(Integer,List<Object[]>)方法

这是个简单的Excel读写操作,快GET吧!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表