最近做一個小項目,中間有一個環(huán)節(jié)是將集合里的數(shù)據(jù)保存到本地Excel文件中、將本地Excel文件讀取到集合里面
POI’
簡單說一下吧:POI是apache提供的,對Microsoft Office格式的文檔提供讀寫支持!
1 ** 2 * excel 工具類 3 * 提供:導(dǎo)入Excel 和 導(dǎo)出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 * 導(dǎo)入Excel16 * @param strs 標(biāo)題17 * @param list 集合18 * @param path 保存路徑/文件名.xls19 * @throws Exception20 */21 public static Integer ToExcel(List<Object[]> list,String path) throws Exception{22 //創(chuàng)建Excel文檔、此時內(nèi)容在內(nèi)存中23 hwb=new HSSFWorkbook();24 //sheet 對應(yīng)創(chuàng)建一個工作夾;25 sheet=hwb.createSheet("debug.factory");26 //打印行27 for(int i=0;i<list.size();i++){28 //創(chuàng)建一行29 row=sheet.createRow(i);30 //得到一行數(shù)據(jù)31 Object []objs=(Object[])list.get(i);32 //打印列33 for(int a=0;a<objs.length;a++){34 //創(chuàng)建一列35 cell= row.createCell(a);36 //設(shè)值37 cell.setCellValue(objs[a].toString());38 }39 }40 // 創(chuàng)建文件輸出流,準(zhǔn)備輸出電子表格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();返回的是最后一行數(shù)據(jù)的下標(biāo),0開始的,所以這里返回下標(biāo)為129 assertEquals((long)1,(long)ExcelTool.ToExcel(objs, "E://test2.xls"));30 }31 32 }
2、導(dǎo)出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 //創(chuàng)建一行 8 row=sheet.createRow(startRow+i); 9 //得到一行數(shù)據(jù)10 Object []objs=(Object[])lists.get(i);11 //打印列12 for(int a=0;a<objs.length;a++){13 //創(chuàng)建一列14 cell= row.createCell(a);15 //設(shè)值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 //創(chuàng)建hwb對象35 hwb = new HSSFWorkbook(is);36 //記錄下最后一行記錄下標(biāo),+1更新下一行寫入下標(biāo)37 int lastRow=hwb.getSheetAt(0).getLastRowNum()+1;38 //循環(huán)創(chuàng)建39 write(lastRow,list);40 // 創(chuàng)建文件輸出流,準(zhǔn)備輸出電子表格41 OutputStream out = new FileOutputStream(path);42 hwb.write(out);43 out.close();44 return hwb.getSheetAt(0).getLastRowNum();45 }
之前寫的代碼里面有重復(fù)的代碼段,提取出來,寫成write(Integer,List<Object[]>)方法
這是個簡單的Excel讀寫操作,快GET吧!
|
新聞熱點
疑難解答