Commit 552cb337835ac4879cb2492e389d18d9e0d8b072
1 parent
d1214f18
Exists in
dev
1: 导出模板添加下拉框功能
Showing
5 changed files
with
105 additions
and
2 deletions
Show diff stats
zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/controller/McBasicCmtyController.java
@@ -18,6 +18,7 @@ import com.chinagas.modules.schsf.domain.dto.CompanyDto; | @@ -18,6 +18,7 @@ import com.chinagas.modules.schsf.domain.dto.CompanyDto; | ||
18 | import com.chinagas.modules.schsf.domain.vo.McBasicCmtyVo; | 18 | import com.chinagas.modules.schsf.domain.vo.McBasicCmtyVo; |
19 | import com.chinagas.modules.schsf.service.ICommonService; | 19 | import com.chinagas.modules.schsf.service.ICommonService; |
20 | import com.chinagas.modules.schsf.service.IMcBasicCmtyService; | 20 | import com.chinagas.modules.schsf.service.IMcBasicCmtyService; |
21 | +import com.chinagas.modules.schsf.utils.listener.McBasicCmtySheetWriteHandler; | ||
21 | import com.chinagas.modules.schsf.utils.listener.McBasicCmtyImportInspection; | 22 | import com.chinagas.modules.schsf.utils.listener.McBasicCmtyImportInspection; |
22 | import lombok.extern.slf4j.Slf4j; | 23 | import lombok.extern.slf4j.Slf4j; |
23 | import org.springframework.beans.factory.annotation.Autowired; | 24 | import org.springframework.beans.factory.annotation.Autowired; |
@@ -28,6 +29,7 @@ import javax.servlet.http.HttpServletResponse; | @@ -28,6 +29,7 @@ import javax.servlet.http.HttpServletResponse; | ||
28 | import java.io.IOException; | 29 | import java.io.IOException; |
29 | import java.io.InputStream; | 30 | import java.io.InputStream; |
30 | import java.net.URLEncoder; | 31 | import java.net.URLEncoder; |
32 | +import java.util.ArrayList; | ||
31 | import java.util.HashMap; | 33 | import java.util.HashMap; |
32 | import java.util.List; | 34 | import java.util.List; |
33 | import java.util.Map; | 35 | import java.util.Map; |
@@ -188,8 +190,16 @@ public class McBasicCmtyController extends BaseController { | @@ -188,8 +190,16 @@ public class McBasicCmtyController extends BaseController { | ||
188 | // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 | 190 | // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 |
189 | String fileName = URLEncoder.encode("基础数据-户数", "UTF-8").replaceAll("\\+", "%20"); | 191 | String fileName = URLEncoder.encode("基础数据-户数", "UTF-8").replaceAll("\\+", "%20"); |
190 | response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); | 192 | response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); |
193 | + //测试数据,实际开发中一般查询查询库,调用Service查询获得 | ||
194 | + List<String> xllist = new ArrayList<>(); | ||
195 | + xllist.add("乡燃"); | ||
196 | + xllist.add("城燃"); | ||
191 | // 这里需要设置不关闭流 | 197 | // 这里需要设置不关闭流 |
192 | - EasyExcel.write(response.getOutputStream(), McBasicCmty.class).autoCloseStream(Boolean.FALSE).sheet("客户信息列表").doWrite(list); | 198 | + EasyExcel.write(response.getOutputStream(), McBasicCmty.class) |
199 | + .registerWriteHandler(new McBasicCmtySheetWriteHandler(xllist, 11)) | ||
200 | + .autoCloseStream(Boolean.FALSE) | ||
201 | + .sheet("客户信息列表") | ||
202 | + .doWrite(list); | ||
193 | } catch (Exception e) { | 203 | } catch (Exception e) { |
194 | // 重置response | 204 | // 重置response |
195 | e.printStackTrace(); | 205 | e.printStackTrace(); |
zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/controller/McBasicMoneyController.java
@@ -19,6 +19,7 @@ import com.chinagas.modules.schsf.domain.vo.McBasicCmtyVo; | @@ -19,6 +19,7 @@ import com.chinagas.modules.schsf.domain.vo.McBasicCmtyVo; | ||
19 | import com.chinagas.modules.schsf.domain.vo.McBasicMoneyVo; | 19 | import com.chinagas.modules.schsf.domain.vo.McBasicMoneyVo; |
20 | import com.chinagas.modules.schsf.service.ICommonService; | 20 | import com.chinagas.modules.schsf.service.ICommonService; |
21 | import com.chinagas.modules.schsf.service.IMcBasicMoneyService; | 21 | import com.chinagas.modules.schsf.service.IMcBasicMoneyService; |
22 | +import com.chinagas.modules.schsf.utils.listener.McBasicCmtySheetWriteHandler; | ||
22 | import com.chinagas.modules.schsf.utils.listener.McBasicMoneyImportInspection; | 23 | import com.chinagas.modules.schsf.utils.listener.McBasicMoneyImportInspection; |
23 | import lombok.extern.slf4j.Slf4j; | 24 | import lombok.extern.slf4j.Slf4j; |
24 | import org.apache.commons.lang3.StringUtils; | 25 | import org.apache.commons.lang3.StringUtils; |
@@ -31,6 +32,7 @@ import java.io.IOException; | @@ -31,6 +32,7 @@ import java.io.IOException; | ||
31 | import java.io.InputStream; | 32 | import java.io.InputStream; |
32 | import java.net.URLEncoder; | 33 | import java.net.URLEncoder; |
33 | import java.sql.SQLIntegrityConstraintViolationException; | 34 | import java.sql.SQLIntegrityConstraintViolationException; |
35 | +import java.util.ArrayList; | ||
34 | import java.util.HashMap; | 36 | import java.util.HashMap; |
35 | import java.util.List; | 37 | import java.util.List; |
36 | import java.util.Map; | 38 | import java.util.Map; |
@@ -146,8 +148,14 @@ public class McBasicMoneyController extends BaseController { | @@ -146,8 +148,14 @@ public class McBasicMoneyController extends BaseController { | ||
146 | // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 | 148 | // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 |
147 | String fileName = URLEncoder.encode("基础数据-金额", "UTF-8").replaceAll("\\+", "%20"); | 149 | String fileName = URLEncoder.encode("基础数据-金额", "UTF-8").replaceAll("\\+", "%20"); |
148 | response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); | 150 | response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); |
151 | + List<String> xllist = new ArrayList<>(); | ||
152 | + xllist.add("乡燃"); | ||
153 | + xllist.add("城燃"); | ||
149 | // 这里需要设置不关闭流 | 154 | // 这里需要设置不关闭流 |
150 | - EasyExcel.write(response.getOutputStream(), McBasicMoney.class).autoCloseStream(Boolean.FALSE).sheet("客户信息列表") | 155 | + EasyExcel.write(response.getOutputStream(), McBasicMoney.class) |
156 | + .registerWriteHandler(new McBasicCmtySheetWriteHandler(xllist, 11)) | ||
157 | + .autoCloseStream(Boolean.FALSE) | ||
158 | + .sheet("客户信息列表") | ||
151 | .doWrite(list); | 159 | .doWrite(list); |
152 | } catch (Exception e) { | 160 | } catch (Exception e) { |
153 | // 重置response | 161 | // 重置response |
zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicCmtyImportInspection.java
@@ -28,6 +28,11 @@ public class McBasicCmtyImportInspection extends AnalysisEventListener<McBasicCm | @@ -28,6 +28,11 @@ public class McBasicCmtyImportInspection extends AnalysisEventListener<McBasicCm | ||
28 | if (StringUtils.isEmpty(mcBasicCmty.getVlgOrCmty())) { | 28 | if (StringUtils.isEmpty(mcBasicCmty.getVlgOrCmty())) { |
29 | throw new RuntimeException(String.format("第%s行 小区/村 为空,请核实", context.readRowHolder().getRowIndex() + 1)); | 29 | throw new RuntimeException(String.format("第%s行 小区/村 为空,请核实", context.readRowHolder().getRowIndex() + 1)); |
30 | } | 30 | } |
31 | + if (StringUtils.isNotEmpty(mcBasicCmty.getUrbRurCls())) { | ||
32 | + if (!mcBasicCmty.getUrbRurCls().equals("乡燃") && !mcBasicCmty.getUrbRurCls().equals("城燃")){ | ||
33 | + throw new RuntimeException(String.format("第%s行 城乡分类 请选择‘乡燃’或‘城燃’,请核实", context.readRowHolder().getRowIndex() + 1)); | ||
34 | + } | ||
35 | + } | ||
31 | } | 36 | } |
32 | 37 | ||
33 | /** | 38 | /** |
zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicCmtySheetWriteHandler.java
0 → 100644
@@ -0,0 +1,75 @@ | @@ -0,0 +1,75 @@ | ||
1 | +package com.chinagas.modules.schsf.utils.listener; | ||
2 | + | ||
3 | +import com.alibaba.excel.write.handler.SheetWriteHandler; | ||
4 | +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; | ||
5 | +import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; | ||
6 | +import org.apache.poi.ss.usermodel.*; | ||
7 | +import org.apache.poi.ss.util.CellRangeAddressList; | ||
8 | + | ||
9 | +import java.util.HashMap; | ||
10 | +import java.util.List; | ||
11 | +import java.util.Map; | ||
12 | + | ||
13 | +public class McBasicCmtySheetWriteHandler implements SheetWriteHandler { | ||
14 | + | ||
15 | + private List<String> selectDataList; | ||
16 | + private int ls = 0; | ||
17 | + | ||
18 | + public McBasicCmtySheetWriteHandler(List<String> selectDataList, int ls) { | ||
19 | + this.selectDataList = selectDataList; | ||
20 | + this.ls = ls; | ||
21 | + } | ||
22 | + | ||
23 | + /** | ||
24 | + * 想实现Excel引用其他sheet页数据作为单元格下拉选项值, | ||
25 | + * 需要重写该方法 | ||
26 | + * | ||
27 | + * @param writeWorkbookHolder | ||
28 | + * @param writeSheetHolder | ||
29 | + */ | ||
30 | + @Override | ||
31 | + public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { | ||
32 | + // 构造下拉选项单元格列的位置,以及下拉选项可选参数值的map集合 | ||
33 | + Map<Integer, List<String>> selectParamMap = new HashMap<>(); | ||
34 | + selectParamMap.put(ls, selectDataList); // 假设下拉选项放在第一列 | ||
35 | + | ||
36 | + // 获取第一个sheet页 | ||
37 | + Sheet sheet = writeSheetHolder.getCachedSheet(); | ||
38 | + // 获取sheet页的数据校验对象 | ||
39 | + DataValidationHelper helper = sheet.getDataValidationHelper(); | ||
40 | + // 获取工作簿对象,用于创建存放下拉数据的字典sheet数据页 | ||
41 | + Workbook workbook = writeWorkbookHolder.getWorkbook(); | ||
42 | + | ||
43 | + // 迭代索引,用于存放下拉数据的字典sheet命名 | ||
44 | + int index = 1; | ||
45 | + for (Map.Entry<Integer, List<String>> entry : selectParamMap.entrySet()) { | ||
46 | + // 设置存放下拉数据的字典sheet,并把这些sheet隐藏掉,这样用户交互更友好 | ||
47 | + String dictSheetName = "dict_hide_sheet" + index; | ||
48 | + Sheet dictSheet = workbook.createSheet(dictSheetName); | ||
49 | + // 隐藏字典sheet页 | ||
50 | + workbook.setSheetHidden(index++, true); | ||
51 | + // 创建一个名为“dictSheetName”的名称,指向字典表中的数据区域 | ||
52 | + String refers = dictSheetName + "!$A$1:$A$" + (entry.getValue().size() + 1); | ||
53 | + Name name = workbook.createName(); | ||
54 | + name.setNameName(dictSheetName); | ||
55 | + name.setRefersToFormula(refers); | ||
56 | + | ||
57 | + // 向字典sheet写数据,从第一行开始写 | ||
58 | + for (int i = 0; i < entry.getValue().size(); i++) { | ||
59 | + Row row = dictSheet.createRow(i); | ||
60 | + Cell cell = row.createCell(0); | ||
61 | + cell.setCellValue(entry.getValue().get(i)); | ||
62 | + } | ||
63 | + | ||
64 | + // 设置下拉列表覆盖的行数,从第一行开始到最后一行 | ||
65 | + CellRangeAddressList infoList = new CellRangeAddressList(1, Short.MAX_VALUE, entry.getKey(), entry.getKey()); | ||
66 | + | ||
67 | + // 创建下拉列表约束 | ||
68 | + DataValidationConstraint constraint = helper.createFormulaListConstraint(dictSheetName); | ||
69 | + DataValidation dataValidation = helper.createValidation(constraint, infoList); | ||
70 | + sheet.addValidationData(dataValidation); | ||
71 | + | ||
72 | + index++; | ||
73 | + } | ||
74 | + } | ||
75 | +} |
zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicMoneyImportInspection.java
@@ -21,6 +21,11 @@ public class McBasicMoneyImportInspection extends AnalysisEventListener<McBasicM | @@ -21,6 +21,11 @@ public class McBasicMoneyImportInspection extends AnalysisEventListener<McBasicM | ||
21 | if (StringUtils.isEmpty(mcBasicMoney.getCompanyCode())) { | 21 | if (StringUtils.isEmpty(mcBasicMoney.getCompanyCode())) { |
22 | throw new RuntimeException(String.format("第%s行 公司代码 为空,请核实", context.readRowHolder().getRowIndex() + 1)); | 22 | throw new RuntimeException(String.format("第%s行 公司代码 为空,请核实", context.readRowHolder().getRowIndex() + 1)); |
23 | } | 23 | } |
24 | + if (StringUtils.isNotEmpty(mcBasicMoney.getUrbRurCls())) { | ||
25 | + if (!mcBasicMoney.getUrbRurCls().equals("乡燃") && !mcBasicMoney.getUrbRurCls().equals("城燃")){ | ||
26 | + throw new RuntimeException(String.format("第%s行 城乡分类 请选择‘乡燃’或‘城燃’,请核实", context.readRowHolder().getRowIndex() + 1)); | ||
27 | + } | ||
28 | + } | ||
24 | } | 29 | } |
25 | 30 | ||
26 | @Override | 31 | @Override |