POI-Microsoft Office读写支持

最近做一个小项目,中间有一个环节是将集合里的数据保存到本地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吧!

 

你可能感兴趣的:(Microsoft)