java實現Excel數據導出
java實現Excel數據導出:
目前,比較常用的實現Java導入、導出Excel的技術有兩種Jakarta POI和Java Excel
Jakarta POI 是一套用於訪問微軟格式文檔的Java API。Jakarta POI有很多組件組成,其中有用於操作Excel格式文件的HSSF和用於操作Word的HWPF,在各種組件中目前只有用於操作Excel的HSSF相對成熟。官方主頁http://poi.apache.org/index.html,API文檔http://poi.apache.org/apidocs/index.html
Jakarta POI HSSF API組件
HSSF(用於操作Excel的組件)提供給用戶使用的對象在rg.apache.poi.hssf.usermodel包中,主要部分包括Excel對象,樣式和格式,還有輔助操作。有以下幾種對象:
2.3 基本操作步驟
首先,理解一下一個Excel的文件的組織形式,一個Excel文件對應於一個workbook(HSSFWorkbook),一個workbook可以有多個sheet(HSSFSheet)組成,一個sheet是由多個row(HSSFRow)組成,一個row是由多個cell(HSSFCell)組成。
基本操作步驟:
下面來看一個動態生成Excel文件的例子:
1 //創建HSSFWorkbook對象
2 HSSFWorkbook wb = new HSSFWorkbook();
3 //創建HSSFSheet對象
4 HSSFSheet sheet = wb.createSheet("sheet0");
5 //創建HSSFRow對象
6 HSSFRow row = sheet.createRow(0);
7 //創建HSSFCell對象
8 HSSFCell cell=row.createCell(0);
9 //設置單元格的值
10 cell.setCellValue("單元格中的中文");
11 //輸出Excel文件
12 FileOutputStream output=new FileOutputStream("d:\\workbook.xls");
13 wkb.write(output);
14 output.flush();
HSSF讀取文件同樣還是使用這幾個對象,只是把相應的createXXX方法變成了getXXX方法即可。可見只要理解了其中原理,不管是讀還是寫亦或是特定格式都可以輕松實現,正所謂知其然更要知其所以然。
2:導出Excel應用實例:
請參考:https://blog.csdn.net/xunwei0303/article/details/53213130
3:導出表格的工具類:
excelUtil:
1 public static void downLoadUtil(HttpServletResponse response, List<List<String>> data) { 2 //文件名字--時間戳 3 long timeMillis = System.currentTimeMillis(); 4 String name = Long.toString(timeMillis); 5 //響應文件的格式 6 response.setContentType("application/vnd.ms-excel"); 7 //創建excel對象 8 HSSFWorkbook workbook = new HSSFWorkbook(); 9 10 ServletOutputStream outputStream = null; 11 try { 12 // 進行轉碼,使其支持中文文件名 13 String codedFileName = new String(name.getBytes("gbk"), "iso-8859-1"); 14 response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xls"); 15 //往表格中裝入數據: 16 //創建Excel 表格 17 HSSFSheet sheet = workbook.createSheet("sheet1"); 18 //遍歷數據: 19 for (int i = 0; i < data.size(); i++) { 20 // 取出一行數據 21 List<String> rowData = data.get(i); 22 //創建一行 23 HSSFRow row = sheet.createRow(1); 24 for (int j = 0; j < rowData.size(); j++) { 25 //取出一行中的一個數據 26 String str = rowData.get(j); 27 //創建表格一行的一個格子(列) 28 HSSFCell cell = row.createCell(j); 29 //把數據裝入表格: 30 cell.setCellValue(str); 31 } 32 } 33 outputStream = response.getOutputStream(); 34 workbook.write(outputStream); 35 36 } catch (Exception e) { 37 e.printStackTrace(); 38 System.out.println("文件下載失敗!"); 39 } finally { 40 try { 41 //清除緩存 42 outputStream.flush(); 43 //關閉輸出流 44 outputStream.close(); 45 } catch (IOException e) { 46 e.printStackTrace(); 47 } 48 } 49 System.out.println("文件下載成功!"); 50 }
3-2:將對象轉換為String數組:
工具類:
1 /* 2 * 把Java對象轉換成String數組 3 */ 4 public static String[] getValueRow(Object bean) throws Exception { 5 //運用反射 6 //獲取字節碼: 7 Class<?> aClass = bean.getClass(); 8 //拿到字段: 9 Field[] declaredFields = aClass.getDeclaredFields(); 10 int length = declaredFields.length; 11 String[] row = new String[length]; 12 //從字段裏面取值: 13 for(int i=0;i<length;i++){ 14 Field declaredField = declaredFields[i]; 15 String fieldName = declaredField.getName(); 16 //String methodName ="getUserName"; 17 String methodName = "get"+fieldName.substring(0,1).toUpperCase()+ 18 fieldName.substring(1); 19 Method getUserName = aClass.getMethod(methodName); 20 Object invoke = getUserName.invoke(bean); 21 String value=""; 22 if(invoke!=null){ 23 value=String.valueOf(invoke); 24 } 25 row[i]=value; 26 } 27 return row; 28 }
java實現Excel數據導出