码迷,mamicode.com
首页 > 其他好文 > 详细

POI-Microsoft Office读写支持

时间:2015-04-30 19:42:44      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

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

POI’ 

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

  • HSSF - 提供读写Microsoft Excel格式档案的功能。
  • XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
  • 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      * 导入Excel
16      * @param strs 标题
17      * @param list 集合
18      * @param path 保存路径/文件名.xls
19      * @throws Exception
20      */
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 Marvel
16  *
17  */
18 public class ExcelToolTest {
19     
20     
21     @Test
22     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开始的,所以这里返回下标为1
29         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 list
27      * @param path
28      * @return
29      * @throws Exception
30      */
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吧!

 

POI-Microsoft Office读写支持

标签:

原文地址:http://www.cnblogs.com/iNewbie/p/4469583.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!