|
@@ -1274,4 +1274,144 @@ public class ExcelUtil<T>
|
|
|
}
|
|
|
return sheetIndexPicMap;
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 对list数据源将其里面的数据导入到excel表单(只导出选中的列)
|
|
|
+ *
|
|
|
+ * @param list 导出数据集合
|
|
|
+ * @param sheetName 工作表的名称
|
|
|
+ * @param selectedFields 选中的字段列表
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ public AjaxResult exportExcelSelectedColumns(List<T> list, String sheetName, List<String> selectedFields) {
|
|
|
+ this.init(list, sheetName, Type.EXPORT);
|
|
|
+ return exportExcelSelectedColumns(selectedFields);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对list数据源将其里面的数据导入到excel表单(只导出选中的列)
|
|
|
+ *
|
|
|
+ * @param response 返回数据
|
|
|
+ * @param list 导出数据集合
|
|
|
+ * @param sheetName 工作表的名称
|
|
|
+ * @param selectedFields 选中的字段列表
|
|
|
+ * @return 结果
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public void exportExcelSelectedColumns(HttpServletResponse response, List<T> list, String sheetName, List<String> selectedFields) throws IOException {
|
|
|
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
|
|
+ response.setCharacterEncoding("utf-8");
|
|
|
+ this.init(list, sheetName, Type.EXPORT);
|
|
|
+ exportExcelSelectedColumns(response.getOutputStream(), selectedFields);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对list数据源将其里面的数据导入到excel表单(只导出选中的列)
|
|
|
+ *
|
|
|
+ * @param selectedFields 选中的字段列表
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ public void exportExcelSelectedColumns(OutputStream out, List<String> selectedFields) {
|
|
|
+ try {
|
|
|
+ writeSelectedSheet(selectedFields);
|
|
|
+ wb.write(out);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("导出Excel异常{}", e.getMessage());
|
|
|
+ } finally {
|
|
|
+ IOUtils.closeQuietly(wb);
|
|
|
+ IOUtils.closeQuietly(out);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对list数据源将其里面的数据导入到excel表单(只导出选中的列)
|
|
|
+ *
|
|
|
+ * @param selectedFields 选中的字段列表
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ public AjaxResult exportExcelSelectedColumns(List<String> selectedFields) {
|
|
|
+ OutputStream out = null;
|
|
|
+ try {
|
|
|
+ writeSelectedSheet(selectedFields);
|
|
|
+ String filename = encodingFilename(sheetName);
|
|
|
+ out = new FileOutputStream(getAbsoluteFile(filename));
|
|
|
+ wb.write(out);
|
|
|
+ return AjaxResult.success(filename);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("导出Excel异常{}", e.getMessage());
|
|
|
+ throw new UtilException("导出Excel失败,请联系网站管理员!");
|
|
|
+ } finally {
|
|
|
+ IOUtils.closeQuietly(wb);
|
|
|
+ IOUtils.closeQuietly(out);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建写入数据到Sheet(只写入选中的列)
|
|
|
+ */
|
|
|
+ public void writeSelectedSheet(List<String> selectedFields) {
|
|
|
+ // 筛选出选中的字段
|
|
|
+ List<Object[]> selectedFieldList = filterSelectedFields(selectedFields);
|
|
|
+
|
|
|
+ // 取出一共有多少个sheet.
|
|
|
+ double sheetNo = Math.ceil(list.size() / sheetSize);
|
|
|
+ for (int index = 0; index <= sheetNo; index++) {
|
|
|
+ createSheet(sheetNo, index);
|
|
|
+
|
|
|
+ // 产生一行
|
|
|
+ Row row = sheet.createRow(0);
|
|
|
+ int column = 0;
|
|
|
+ // 写入各个字段的列头名称(只写入选中的字段)
|
|
|
+ for (Object[] os : selectedFieldList) {
|
|
|
+ Excel excel = (Excel) os[1];
|
|
|
+ this.createCell(excel, row, column++);
|
|
|
+ }
|
|
|
+ if (Type.EXPORT.equals(type)) {
|
|
|
+ fillSelectedExcelData(index, row, selectedFieldList);
|
|
|
+ addStatisticsRow();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 筛选出选中的字段
|
|
|
+ */
|
|
|
+ private List<Object[]> filterSelectedFields(List<String> selectedFields) {
|
|
|
+ if (selectedFields == null || selectedFields.isEmpty()) {
|
|
|
+ return this.fields; // 如果没有选择字段,返回所有字段
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Object[]> selectedFieldList = new ArrayList<>();
|
|
|
+ for (Object[] fieldInfo : this.fields) {
|
|
|
+ Field field = (Field) fieldInfo[0];
|
|
|
+ if (selectedFields.contains(field.getName())) {
|
|
|
+ selectedFieldList.add(fieldInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return selectedFieldList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 填充excel数据(只填充选中的列)
|
|
|
+ *
|
|
|
+ * @param index 序号
|
|
|
+ * @param row 单元格行
|
|
|
+ * @param selectedFieldList 选中的字段列表
|
|
|
+ */
|
|
|
+ public void fillSelectedExcelData(int index, Row row, List<Object[]> selectedFieldList) {
|
|
|
+ int startNo = index * sheetSize;
|
|
|
+ int endNo = Math.min(startNo + sheetSize, list.size());
|
|
|
+ for (int i = startNo; i < endNo; i++) {
|
|
|
+ row = sheet.createRow(i + 1 - startNo);
|
|
|
+ // 得到导出对象.
|
|
|
+ T vo = (T) list.get(i);
|
|
|
+ int column = 0;
|
|
|
+ for (Object[] os : selectedFieldList) {
|
|
|
+ Field field = (Field) os[0];
|
|
|
+ Excel excel = (Excel) os[1];
|
|
|
+ // 设置实体类私有属性可访问
|
|
|
+ field.setAccessible(true);
|
|
|
+ this.addCell(excel, row, vo, field, column++);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|