1. 程式人生 > >java實現Excel數據導出

java實現Excel數據導出

文件 duti lar data 常用 單元格 讀取 substr trace

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數據導出