poi 07版在已有模板中生成下拉框

poi 07版 导出excel 模板, 在已有模板上修改 指定单元格个生成下拉框

controller 层 提供访问接口, 并设置响应类型

    @GetMapping("downloadExcel")
    @ApiOperation("下载模板")
    public void downloadExcel(HttpServletResponse res, HttpServletRequest request) throws IOException, InvalidFormatException {
        OutputStream os = res.getOutputStream();
        String fileName = "招标合同管理信息模板.xlsx";
        try {
            Workbook workbook = zbHtglService.downloadExcel("zbHtgl.xlsx");
//            byte[] byteArray = StreamUtil.getByteArray("zbHtgl.xlsx");
            res.reset();
            if ("IE".equals(getBrowser(request))) {
                fileName = new String(java.net.URLEncoder.encode(fileName, "UTF-8"));
                res.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            } else {
                fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
                res.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            }
            res.setContentType("application/octet-stream; charset=utf-8");
//            os.write(byteArray);
            workbook.write(os);
//            os.flush();
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (os != null) {
                os.close();
            }
        }
    }

service 层进行excel 处理

    @Override
    public Workbook downloadExcel(String filename) throws Exception {
        // 字典
        List<SysDictDTO> isFbDic1 = sysDictService.selectByDictType("isFb");
//        List<SysDictDTO> zbxmlxDic1 = sysDictService.selectByDictType("zbxmlx");
        List<SysDictDTO> zbdqDic1 = sysDictService.selectByDictType("zbdq");
        List<SysDictDTO> isShDic1 = sysDictService.selectByDictType("isSh");
        List<SysDictDTO> zbhyDic1 = sysDictService.selectByDictType("zbhy");

        // 备用集合
        List<String> isFbList = new ArrayList<>();
//        List<String> zbxmlxList = new ArrayList<>();
//        List<String> zjfwlxList = new ArrayList<>();
        List<String> zbdqList = new ArrayList<>();
        List<String> isShList = new ArrayList<>();
        List<String> zbhyList = new ArrayList<>();
        for (SysDictDTO sysDictDTO : isFbDic1) {
            isFbList.add(sysDictDTO.getDictName());
        }
//        for (SysDictDTO sysDictDTO : zbxmlxDic1) {
//            zbxmlxList.add(sysDictDTO.getDictName());
//        }
//        for (SysDictDTO sysDictDTO : zjfwlxDic1) {
//            zjfwlxList.add(sysDictDTO.getDictName());
//        }
        for (SysDictDTO sysDictDTO : zbdqDic1) {
            zbdqList.add(sysDictDTO.getDictName());
        }
        for (SysDictDTO sysDictDTO : isShDic1) {
            isShList.add(sysDictDTO.getDictName());
        }
        for (SysDictDTO sysDictDTO : zbhyDic1) {
            zbhyList.add(sysDictDTO.getDictName());
        }

        // 转数组
        String[] isFbDic = new String[isFbDic1.size()];
        isFbList.toArray(isFbDic);
//        String[] zbxmlxDic = new String[zbxmlxDic1.size()];
//        zbxmlxList.toArray(zbxmlxDic);
//        String[] zjfwlxDic = new String[zjfwlxDic1.size()];
//        zjfwlxList.toArray(zjfwlxDic);
        String[] zbdqDic = new String[zbdqDic1.size()];
        zbdqList.toArray(zbdqDic);
        String[] isSh = new String[isShDic1.size()];
        isShList.toArray(isSh);
        String[] zbhy = new String[zbhyDic1.size()];
        zbhyList.toArray(zbhy);
        Map<String, String[]> map = new HashMap<>();
        map.put("记录地区", zbdqDic);
//        map.put("服务类型", zjfwlxDic);
        map.put("是否发布", isFbDic);
//        map.put("类型", zbxmlxDic);
        map.put("行业", zbhy);
        map.put("审核标示", isSh);
//      读取已存在的excel模板
        InputStream resourceAsStream = StreamUtil.class.getResourceAsStream("/excel/" + filename);
//        POIFSFileSystem poifsFileSystem=new POIFSFileSystem(resourceAsStream);
//        Workbook Workbook=new HSSFWorkbook(poifsFileSystem);//得到文档对象
        Workbook workbook = WorkbookFactory.create(resourceAsStream);//得到文档对象
        Sheet sheet = workbook.getSheet("sheet1");
        Row row = sheet.getRow(1);

        int physicalNumberOfCells = row.getPhysicalNumberOfCells();
        for (int i = 0; i < physicalNumberOfCells; i++) {
            Cell cell = row.getCell(i);
            String[] s = map.get(cell.toString());
            if (s != null) {
                // 单元格生成下拉狂
                XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet) sheet);
                XSSFDataValidationConstraint dvConstraint1 = (XSSFDataValidationConstraint) dvHelper
                        .createExplicitListConstraint(s);
                // 哪些单元格将被设置为下拉, (首行,尾行,首列,尾列)
                CellRangeAddressList addressList1 = new CellRangeAddressList(2, 65536, i, i);
                XSSFDataValidation dataValidation1 = (XSSFDataValidation) dvHelper.createValidation(
                        dvConstraint1, addressList1);
                sheet.addValidationData(dataValidation1);
            }
        }
        return workbook;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值