最近做一个小项目,中间有一个环节是将集合里的数据保存到本地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 * 导入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吧!
新闻热点
疑难解答