一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - JavaWeb動態導出Excel可彈出下載

JavaWeb動態導出Excel可彈出下載

2020-04-10 15:34王伴閑 JAVA教程

這篇文章主要介紹了JavaWeb動態導出Excel,對Excel可彈出進行下載操作,感興趣的小伙伴們可以參考一下

由于項目需求,需要將數據導出成Excel表格,并且可選擇導出項,可下載。項目使用的Spring+Mybatis+SpringMVC框架,利用Apache POI導出Excel。POI具體使用請自行百度。話不多說,上代碼。

ExportExcelUtil代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
package com.rixin.common.util;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.util.Collection;
import java.util.Iterator;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Font;
 
/**
 * 基于POI的javaee導出Excel工具類
 *
 * @author [email protected]
 * @see POI
 */
public class ExportExcelUtil {
 /**
  *
  * @param response
  *   請求
  * @param fileName
  *   文件名 如:"學生表"
  * @param excelHeader
  *   excel表頭數組,存放"姓名#name"格式字符串,"姓名"為excel標題行, "name"為對象字段名
  * @param dataList
  *   數據集合,需與表頭數組中的字段名一致,并且符合javabean規范
  * @return 返回一個HSSFWorkbook
  * @throws Exception
  */
 public static <T> HSSFWorkbook export(HttpServletResponse response, String fileName, String[] excelHeader,
   Collection<T> dataList) throws Exception {
  // 設置請求
  response.setContentType("application/application/vnd.ms-excel");
  response.setHeader("Content-disposition",
    "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8"));
  // 創建一個Workbook,對應一個Excel文件
  HSSFWorkbook wb = new HSSFWorkbook();
  // 設置標題樣式
  HSSFCellStyle titleStyle = wb.createCellStyle();
  // 設置單元格邊框樣式
  titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上邊框 細邊線
  titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 下邊框 細邊線
  titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左邊框 細邊線
  titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右邊框 細邊線
  // 設置單元格對齊方式
  titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
  titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
  // 設置字體樣式
  Font titleFont = wb.createFont();
  titleFont.setFontHeightInPoints((short) 15); // 字體高度
  titleFont.setFontName("黑體"); // 字體樣式
  titleStyle.setFont(titleFont);
  // 在Workbook中添加一個sheet,對應Excel文件中的sheet
  HSSFSheet sheet = wb.createSheet(fileName);
  // 標題數組
  String[] titleArray = new String[excelHeader.length];
  // 字段名數組
  String[] fieldArray = new String[excelHeader.length];
  for (int i = 0; i < excelHeader.length; i++) {
   String[] tempArray = excelHeader[i].split("#");// 臨時數組 分割#
   titleArray[i] = tempArray[0];
   fieldArray[i] = tempArray[1];
  }
  // 在sheet中添加標題行
  HSSFRow row = sheet.createRow((int) 0);// 行數從0開始
  HSSFCell sequenceCell = row.createCell(0);// cell列 從0開始 第一列添加序號
  sequenceCell.setCellValue("序號");
  sequenceCell.setCellStyle(titleStyle);
  sheet.autoSizeColumn(0);// 自動設置寬度
  // 為標題行賦值
  for (int i = 0; i < titleArray.length; i++) {
   HSSFCell titleCell = row.createCell(i + 1);// 0號位被序號占用,所以需+1
   titleCell.setCellValue(titleArray[i]);
   titleCell.setCellStyle(titleStyle);
   sheet.autoSizeColumn(i + 1);// 0號位被序號占用,所以需+1
  }
  // 數據樣式 因為標題和數據樣式不同 需要分開設置 不然會覆蓋
  HSSFCellStyle dataStyle = wb.createCellStyle();
  // 設置數據邊框
  dataStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  dataStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
  dataStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  dataStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
  // 設置居中樣式
  dataStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
  dataStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
  // 設置數據字體
  Font dataFont = wb.createFont();
  dataFont.setFontHeightInPoints((short) 12); // 字體高度
  dataFont.setFontName("宋體"); // 字體
  dataStyle.setFont(dataFont);
  // 遍歷集合數據,產生數據行
  Iterator<T> it = dataList.iterator();
  int index = 0;
  while (it.hasNext()) {
   index++;// 0號位被占用 所以+1
   row = sheet.createRow(index);
   // 為序號賦值
   HSSFCell sequenceCellValue = row.createCell(0);// 序號值永遠是第0列
   sequenceCellValue.setCellValue(index);
   sequenceCellValue.setCellStyle(dataStyle);
   sheet.autoSizeColumn(0);
   T t = (T) it.next();
   // 利用反射,根據傳過來的字段名數組,動態調用對應的getXxx()方法得到屬性值
   for (int i = 0; i < fieldArray.length; i++) {
    HSSFCell dataCell = row.createCell(i + 1);
    dataCell.setCellStyle(dataStyle);
    sheet.autoSizeColumn(i + 1);
    String fieldName = fieldArray[i];
    String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);// 取得對應getXxx()方法
    Class<? extends Object> tCls = t.getClass();// 泛型為Object以及所有Object的子類
    Method getMethod = tCls.getMethod(getMethodName, new Class[] {});// 通過方法名得到對應的方法
    Object value = getMethod.invoke(t, new Object[] {});// 動態調用方,得到屬性值
    if (value != null) {
     dataCell.setCellValue(value.toString());// 為當前列賦值
    }
   }
  }
 
  OutputStream outputStream = response.getOutputStream();// 打開流
  wb.write(outputStream);// HSSFWorkbook寫入流
  wb.close();// HSSFWorkbook關閉
  outputStream.flush();// 刷新流
  outputStream.close();// 關閉流
  return wb;
 }
 // XSSFCellStyle.ALIGN_CENTER 居中對齊
 // XSSFCellStyle.ALIGN_LEFT 左對齊
 // XSSFCellStyle.ALIGN_RIGHT 右對齊
 // XSSFCellStyle.VERTICAL_TOP 上對齊
 // XSSFCellStyle.VERTICAL_CENTER 中對齊
 // XSSFCellStyle.VERTICAL_BOTTOM 下對齊
 
 // CellStyle.BORDER_DOUBLE 雙邊線
 // CellStyle.BORDER_THIN 細邊線
 // CellStyle.BORDER_MEDIUM 中等邊線
 // CellStyle.BORDER_DASHED 虛線邊線
 // CellStyle.BORDER_HAIR 小圓點虛線邊線
 // CellStyle.BORDER_THICK 粗邊線
}

controller代碼

?
1
2
3
4
5
6
7
8
9
10
@RequestMapping("/exportProject.do")
 public void exportProject(HttpServletResponse response, String export) {
  String[] excelHeader = export.split(",");
  List<Project> projectList = projectService.getProjects(null);
  try {
   ExportExcelUtil.export(response, "項目表", excelHeader, projectList);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

JSP部分代碼

?
1
2
3
4
5
6
7
...
<div style="margin-top: 5px;" class="am-input-group am-u-sm-4">
     <span class="am-input-group-label"><input type="checkbox"
      value="項目名稱#name" name="export" checked="checked"></span> <input
      type="text" value="項目名稱" disabled="disabled">
</div>
...

下面上圖

JavaWeb動態導出Excel可彈出下載

JavaWeb動態導出Excel可彈出下載

以上就是本文的全部內容,希望對大家的學習有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产福利片在线 易阳 | 4455永久在线观免费看片 | 欧美激烈精交gif动态图18p | 精品无码一区在线观看 | 国产成人激情视频 | yin娃sao货调教情趣用品店 | 国产成人精品s8sp视频 | 美女69xx| 国产精品视频一区二区三区 | 深夜在线网址 | 好男人免费高清在线观看2019 | 人人澡 人人澡碰人人看软件 | 暖暖高清日本在线 | 成人aaaa| 好湿好滑好硬好爽好深视频 | 欧美vpswindows | 日本一区二区免费在线观看 | 国产馆精品推荐在线观看 | 精品国产免费观看一区高清 | 深夜影院深a | 456成人免费高清视频 | 第一次破苞h | 猛男壮男受bl爽哭了高h | 成人免费福利网站在线看 | 美女脱了内裤让男生玩屁股 | videos护士有奶水 | 无码AV免费精品一区二区三区 | 99久久精品免费看国产一区 | 精品91自产拍在线 | 九九免费精品视频 | 五月色综合婷婷综合俺来也 | 日本不卡视频免费的 | 果冻传媒在线视频观看免费 | 免费观看毛片视频 | 日本xxxxxx片免费播放18 | 91短视频版高清在线观看免费 | 91国语精品自产拍在线观看一 | 91一区二区在线观看精品 | 性欧美videofree中文字幕 | 好大好硬好深好爽想要小雪 | 色香视频在线 |