标签:
最近做一个小项目,中间有一个环节是将集合里的数据保存到本地Excel文件中、将本地Excel文件读取到集合里面
POI’
简单说一下吧:POI是apache提供的,对Microsoft Office格式的文档提供读写支持!
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吧!
标签:
原文地址:http://www.cnblogs.com/iNewbie/p/4469583.html