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

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

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可彈出下載

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女69xx | 全肉一女n男np高h双龙养成 | 免费抽搐一进一出印度 | 成人操| 99任你躁精品视频 | 成人看的羞羞视频免费观看 | chinese男同志同性twink | 色偷偷亚洲综合网亚洲 | 欧美在线视频一区 | 护士的小嫩嫩好紧好舒服 | 久久99re2在线视频精品 | 久久中文字幕亚洲精品最新 | 国产99青草全福视在线 | 69人成网站色www | 粗暴hd另类另类 | 男人把j放进女人的p里视频 | 俄罗斯bbbbbbbbb大片 | 国模孕妇季玥全部人体写真 | 美女福利视频网站 | 亚洲欧美久久一区二区 | 好大好爽好硬我要喷水了 | 男男gaygays中国 | 日本在线播放 | 免费看成人毛片日本久久 | 亚飞与亚基国语1080p在线观看 | 国产午夜精品福利 | 精品视频入口 | 美女被躁爽死 | 俺去俺来也在线www色官网 | 成人午夜爽爽爽免费视频 | 欧美xxoo做爰猛烈视频 | 国产情侣偷国语对白 | 国产精品香蕉夜间视频免费播放 | 国产精品欧美一区二区 | 欧美日韩三区 | 我的妹妹最近有点怪在线观看 | 高级黄色片| 欧美精品v欧洲高清 | 亚洲欧美久久婷婷爱综合一区天堂 | 国产成人亚洲综合a∨婷婷 国产成人亚洲精品乱码在线观看 | 亚洲社区在线观看 |