vue前端代码:file-saver - npm
index.js:
复制代码
1
2
3
4
5
6
7
8export function exportFile(data) { return request({ url: '/url/export', method: 'get', params: data, responseType: 'blob' }) }
index.vue:
复制代码
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
34import FileSaver from 'file-saver' import { exportFile } from '@/api/*****/url/index' methods: { // TODO 自定义字段导出 实例 exportQuery() { let data = {}; data.headArray = ['项目名称','项目名称','项目名称','项目名称','项目名称']; let list =[]; let list1 =[]; list1.push("项目名称-1"); list1.push("项目名称-2"); list1.push("项目名称-3"); list1.push("项目名称-4"); list1.push("项目名称-5"); let list2 =[]; list1.push("项目名称-1"); list1.push("项目名称-2"); list1.push("项目名称-3"); list1.push("项目名称-4"); list1.push("项目名称-5"); list.push(list1); list.push(list2); data.headArray = ['项目名称','项目名称','项目名称','项目名称','项目名称']; data.dataList = list; exportFile(data).then(response => { const blob = new Blob([response]) FileSaver.saveAs(blob, 'XXXXX.xls') }) }, }
后端Java代码:
复制代码
1
2
3
4
5
6
7<dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>4.2.0</version> </dependency>
复制代码
1ExportEntity.java
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20import lombok.Data; import java.util.List; @Data public class ExportEntity { // 多个Sheet的数据 // List<List<List<String>>> dataLinesList; List dataLinesList; // 单个Sheet的数据 List<List<String>> dataList; // head数据 String[] headArray; // Sheet数据 String[] sheetArray; }
复制代码
1ExportWordUtil.java
复制代码
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223import cn.afterturn.easypoi.word.WordExportUtil; import com.zzy.common.core.utils.StringUtils; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xwpf.usermodel.XWPFDocument; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; /** * 动态生成exel,并导出 */ public class ExportWordUtil { public static void exportWordByImg(String fileName, Map<String, Object> params, HttpServletResponse response) { try { XWPFDocument doc = WordExportUtil.exportWord07("template/supervisionSheet.docx", params); response.setCharacterEncoding("utf-8"); // 设置强制下载不打开 response.setContentType("application/force-download"); // 设置文件名 response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); // + java.net.URLEncoder.encode(fileName)); OutputStream out = response.getOutputStream(); doc.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 单个Sheet使用 * * @param dataList 包裹每行数据的list * @param headArray 自定义head * @param response */ public static void createExcel(ExportEntity entity, HttpServletResponse response) { String[] sheetArray = new String[]{"Sheet1"}; List list = new ArrayList(); list.add(entity.getDataList()); createExcel(list, entity.getHeadArray(), sheetArray, response); } /** * 自定义多个Sheet的使用方法: * String[] sheetArray = new String[]{"Sheet1", "Sheet2", "Sheet3"}; * List<List> list = new ArrayList(); * // Sheet1 的数据 * list.add(dataList); * // Sheet2 的数据 * list.addAll(dataList); * // Sheet3 的数据 * list.addAll(dataList); * createExcel(list, headArray, sheetArray, response); * * @param dataList 多个Sheet数据 * @param headArray head数据 * @param sheetArray Sheet数据 * @param response */ public static void createExcel(List<List> dataList, String[] headArray, String[] sheetArray, HttpServletResponse response) { try { // 创建excel工作簿 SXSSFWorkbook wb = new SXSSFWorkbook(); // 创建字体、可以设置样式 Font f = wb.createFont(); // 创建单元格格式、可以设置样式 CellStyle cellStyle = wb.createCellStyle(); cellStyle.setBorderBottom(BorderStyle.THIN); //下边框 cellStyle.setBorderLeft(BorderStyle.THIN);//左边框 cellStyle.setBorderTop(BorderStyle.THIN);//上边框 cellStyle.setBorderRight(BorderStyle.THIN);//右边框 // 创建sheet for (int n = 1; n <= sheetArray.length; n++) { SXSSFSheet sheet = wb.createSheet(sheetArray[n - 1]);// 新创建一个sheet // 创建一个sheet Row row = sheet.createRow(0); Cell cell = row.createCell(0); for (int j = 0; j < headArray.length; j++) { if (StringUtils.isEmpty(headArray[j])) { continue; } // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。 sheet.setColumnWidth(j, (45 * 150)); row.setHeight((short) (25 * 20)); cell = row.createCell(j); cell.setCellValue(headArray[j]); //水平居中 cellStyle.setAlignment(HorizontalAlignment.CENTER); //垂直居中 cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); cell.setCellStyle(cellStyle); } DateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 日期格式化 // 每一个sheet最大条数: 1048500 List list = dataList.get(n - 1); for (int i = 0; i < list.size(); i++) { row = sheet.createRow(i + 1);// 创建的行 Object obj = list.get(i);// 获得对象 if (obj instanceof Map) { Map objMap = (Map) obj; Set keys = objMap.keySet(); int j = 0; for (Object objK : keys) { cell = row.createCell(j);// 设置单元格(列) j++; Object value = objMap.get(objK); // 获取属性的类型 String type = value.getClass().toString(); // 判断类型 if (value instanceof Date) { cell.setCellValue(df.format(value)); cell.setCellStyle(cellStyle); } else { cell.setCellValue(value + ""); cell.setCellStyle(cellStyle); } } } else if (obj instanceof List) { List objList = (List) obj; int j = 0; for (Object objK : objList) { cell = row.createCell(j);// 设置单元格(列) j++; Object value = objK + ""; // 判断类型 if (value instanceof Date) { cell.setCellValue(df.format(value)); cell.setCellStyle(cellStyle); } else { cell.setCellValue(value + ""); cell.setCellStyle(cellStyle); } } } else { Field[] field = obj.getClass().getDeclaredFields();// 得到字段数组 int k = 0; for (int j = 0; j < field.length; j++) { if (Modifier.isStatic(field[j].getModifiers())) { continue; } cell = row.createCell(k);// 设置单元格(列) String name = field[j].getName();// 获得字段的名字 name = name.substring(0, 1).toUpperCase() + name.substring(1); // 获取属性的类型 String type = field[j].getGenericType().toString(); // 判断类型 if (type.equals("class java.util.Date")) { Method m = obj.getClass().getMethod("get" + name);// 通过get方式得到Method Date value = (Date) m.invoke(obj); if (StringUtils.isNotNull(value)) { cell.setCellValue(df.format(value)); } else { cell.setCellValue(""); } cell.setCellStyle(cellStyle); } if (type.equals("class java.lang.String")) { Method m = obj.getClass().getMethod("get" + name); // 调用getter方法获取属性值 String value = (String) m.invoke(obj); cell.setCellValue(value); cell.setCellStyle(cellStyle); } if (type.equals("class java.lang.Integer")) { Method m = obj.getClass().getMethod("get" + name); Integer value = (Integer) m.invoke(obj); cell.setCellValue(value); cell.setCellStyle(cellStyle); } if (type.equals("class java.lang.Short")) { Method m = obj.getClass().getMethod("get" + name); Short value = (Short) m.invoke(obj); cell.setCellValue(value); cell.setCellStyle(cellStyle); } if (type.equals("class java.lang.Double")) { Method m = obj.getClass().getMethod("get" + name); Double value = (Double) m.invoke(obj); cell.setCellValue(value); cell.setCellStyle(cellStyle); } if (type.equals("class java.lang.Boolean")) { Method m = obj.getClass().getMethod("get" + name); Boolean value = (Boolean) m.invoke(obj); cell.setCellValue(value); cell.setCellStyle(cellStyle); } k++; } } } } response.setCharacterEncoding("utf-8"); // 设置强制下载不打开 response.setContentType("application/force-download"); // 设置文件名 response.addHeader("Content-Disposition", "attachment;fileName=test.xls"); // + java.net.URLEncoder.encode(fileName)); OutputStream out = response.getOutputStream(); wb.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } } }
最后
以上就是唠叨小丸子最近收集整理的关于JAVA-动态导出Excel(自定义sheet,head)的全部内容,更多相关JAVA-动态导出Excel(自定义sheet内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复