国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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 wjmisaboy@gmail.com
 * @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可彈出下載

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

延伸 · 閱讀

精彩推薦
577
主站蜘蛛池模板: 国产精品欧美久久久久久 | 黄色片免费观看 | 久久国产经典视频 | 麻豆av一区二区 | 一区二区免费看 | 欧美激情一区 | 成人精品视频免费 | 日韩免费在线观看视频 | 成人高清视频在线观看 | 中文字幕乱码亚洲无线三区 | 可以免费看黄的网站 | 精品视频在线观看 | 精品成人免费一区二区在线播放 | 亚洲精品二区 | 欧美黄色免费网址 | 欧美伦理一区二区 | 精品国产青草久久久久福利 | 国产精品免费久久久久久 | 国产视频一二三区 | www伊人 | 在线观看一区二区三区四区 | 国产片在线观看.com | 影音先锋中文字幕一区 | 国产一区二区三区在线视频 | 欧美一级做a爰片久久高潮 免费在线毛片 | 激情毛片| 精品免费国产一区二区三区四区 | 久久99精品一区二区三区 | 久久激情视频 | 亚洲一区二区三区免费观看 | 国产成人精品a视频一区www | 亚洲成人高清 | av色综合 | 中文字幕在线观看视频地址二 | 亚洲精品视频免费 | 欧美一区二区在线视频 | 黄色片在线免费观看 | 九色影院| 国产精品久久久久久久午夜片 | 亚洲va中文字幕 | 久久中文字幕一区 |