模版下载和Excel文件导入

这篇具有很好参考价值的文章主要介绍了模版下载和Excel文件导入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

模版下载

/**
     * 生成模版
     *
     * @param
     * @return AppResponse
     */
    public AppResponse ExcelFile() throws IOException {
        // 创建一个新的Excel工作簿
        Workbook workbook = new XSSFWorkbook();

        // 创建一个工作表
        Sheet sheet = workbook.createSheet("页面拨测模板");

        // 创建行并设置单元格值
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("序号");
        headerRow.createCell(1).setCellValue("拨测地址");
        headerRow.createCell(2).setCellValue("正常状态码");
        headerRow.createCell(3).setCellValue("页面大小(KB)");
        headerRow.createCell(4).setCellValue("加载时间(S)");

        // 设置列宽
        sheet.setColumnWidth(0, 5000);
        sheet.setColumnWidth(1, 5000);
        sheet.setColumnWidth(2, 5000);
        sheet.setColumnWidth(3, 5000);
        sheet.setColumnWidth(4, 5000);

        FileOutputStream outputStream = null;

        //获取字典项 存储路径
        //TODO 数据库配置
        String path = dialDictDataService.getValue(DictConstants.MODEL_FILE);

        // 保存Excel文件
        try {
            outputStream = new FileOutputStream(path + "pageTemplate.xlsx");
            workbook.write(outputStream);
            logger.info("DialPageTaskComponent.downloadExcelFile-----------Excel模板生成成功");
        } catch (IOException e) {
            e.printStackTrace();
            logger.info("DialPageTaskComponent.downloadExcelFile-----------Excel模板生成失败");
            return AppResponse.failed("生成模版失败");
        } finally {
            IOUtils.closeQuietly(outputStream);
        }

        return AppResponse.ok();
    }
/**
     * 下载模版
     * @param response
     */
    public void downloadPageTemplate(HttpServletResponse response) {

        OutputStream out = null;
        InputStream in = null;
        ByteArrayOutputStream bos = null;
        String fileName = "pageTemplate导入模版";

        try {
            // 读取模板
            Resource res = new ClassPathResource("pageTemplate.xlsx");
            XSSFWorkbook workbook = new XSSFWorkbook(res.getInputStream());

            // 转换为字节流
            bos = new ByteArrayOutputStream();
            workbook.write(bos);
            byte[] barray = bos.toByteArray();
            in = new ByteArrayInputStream(barray);

            response.reset();
            response.setContentType("application/octet-stream");
            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx");
            out = response.getOutputStream();
            byte[] b = new byte[1024];
            int len;
            while ((len = in.read(b)) > 0) {
                out.write(b, 0, len);
            }
            out.flush();
        } catch (Exception e) {
            logger.error("DialPageTaskComponent.downloadPageTemplate, 下载模板失败", e);
        } finally {
            if (null != in) {
                try {
                    in.close();
                } catch (IOException e) {
                    logger.error("DialPageTaskComponent.downloadPageTemplate, 关闭资源异常", e);
                }
                in = null;
            }
            if (null != out) {
                try {
                    out.close();
                } catch (IOException e) {
                    logger.error("DialPageTaskComponent.downloadPageTemplate, 关闭资源异常", e);
                }
                out = null;
            }
            if (null != bos) {
                try {
                    bos.flush();
                    bos.close();
                } catch (IOException e) {
                    logger.error("DialPageTaskComponent.downloadPageTemplate, 关闭资源异常", e);
                }
                out = null;
            }
        }
    }

    /**
     * 导入数据
     *
     * @param file
     * @return
     */
    public AppResponse<List<DialPageAddressResponseDTO>> importDial(MultipartFile file) {

        // 获取文件全名(包含扩展名)
        String excelName = file.getOriginalFilename();

        // 上传文件名格式校验
        if (!".xlsx".equals(excelName.substring(excelName.lastIndexOf(".")))) {
            logger.info("DialPageTaskComponent.importDial, 导入失败,请导入excel文件格式, {}", excelName);
            return AppResponse.failed("导入失败,请导入正确的excel文件格式!");
        }

        List<DialPageAddressResponseDTO> resultData = null;

        try {
            ExcelReader excelReader = ExcelUtil.getReader(file.getInputStream()).setIgnoreEmptyRow(false);
            if (excelReader.getSheets().size() != 1) {
                return AppResponse.failed("导入失败,excel内容不标准!");
            }
            // 校验excel是否含有图片
            Workbook workbook = new XSSFWorkbook(file.getInputStream());
            Map<String, PictureData> picMap = ExcelPicUtil.getPicMap(workbook, 0);
            if (CollectionUtil.isNotEmpty(picMap)) {
                return AppResponse.failed("导入失败,excel内容不标准!");
            }

            List<List<Object>> read = excelReader.read(0);
            // 校验excel题头
            AppResponse<Object> checkTitleAppResponse = checkTitle(read);
            if (!checkTitleAppResponse.isOk()) {
                logger.info("DialPageTaskComponent.importDial, 数据校验失败, data={}", checkTitleAppResponse);
                return AppResponse.failed(checkTitleAppResponse.getMsg());
            }

            resultData = this.handleData(read);
        } catch (Throwable e) {
            logger.error("DialPageTaskComponent.importDial, 读取文件失败", e);
            return AppResponse.failed("导入失败,excel读取异常!");
        }

        return AppResponse.ok(resultData);
    }

    /**
     * 校验表头
     *
     * @param read
     * @return AppResponse<Object>
     */
    private AppResponse<Object> checkTitle(List<List<Object>> read) {

        if (CollectionUtil.isEmpty(read) || CollectionUtil.size(read) < 4) {
            logger.info("DialPageTaskComponent.checkTitle, 导入失败,excel内容不可为空, resultData={}", read);
            return AppResponse.failed("导入失败,excel内容不可为空!");
        }
        if (StringUtils.isBlank(String.valueOf(read.get(0).get(0)))) {
            logger.info("DialPageTaskComponent.checkTitle, 导入失败,excel内容不可为空, read={}", read);
            return AppResponse.failed("DialPageTaskComponent.checkTitle, 导入失败,excel内容不可为空!");
        }
        List<Object> secondRow = read.get(1);
        if (CollectionUtil.isEmpty(secondRow)) {
            logger.info("DialPageTaskComponent.checkTitle, 导入失败,excel内容不可为空, read={}", read);
            return AppResponse.failed("导入失败,excel内容不可为空!");
        }
        if (secondRow.size() != 4) {
            logger.info("DialPageTaskComponent.checkTitle, 导入失败,excel表头不正确, secondRow={}", secondRow.size());
            return AppResponse.failed("导入失败,excel表头不正确!");
        }
        if (!"拨测地址".equals(String.valueOf(secondRow.get(0)))) {
            logger.info("DialPageTaskComponent.checkTitle, 导入失败,excel表头不正确-拨测地址, dialAddress={}", secondRow.get(0));
            return AppResponse.failed("导入失败,excel表头不正确!" + String.valueOf(secondRow.get(0)));
        }
        if (!"正常响应码".equals(String.valueOf(secondRow.get(1)))) {
            logger.info("DialPageTaskComponent.checkTitle, 导入失败,excel表头不正确-正常响应码, normalStatusCode={}", secondRow.get(1));
            return AppResponse.failed("导入失败,excel表头不正确!" + String.valueOf(secondRow.get(1)));
        }
        if (!"页面大小".equals(String.valueOf(secondRow.get(2)))) {
            logger.info("DialPageTaskComponent.checkTitle, 导入失败,excel表头不正确-页面大小, responseTime={}", secondRow.get(2));
            return AppResponse.failed("导入失败,excel表头不正确!" + String.valueOf(secondRow.get(2)));
        }
        if (!"加载时间".equals(String.valueOf(secondRow.get(3)))) {
            logger.info("DialPageTaskComponent.checkTitle, 导入失败,excel表头不正确-加载时间, responseTime={}", secondRow.get(3));
            return AppResponse.failed("导入失败,excel表头不正确!" + String.valueOf(secondRow.get(2)));
        }
        // 导入数据为空校验
        AppResponse<Object> checkDataIsEmptyappResponse = checkDataIsEmpty(read);
        if (!checkDataIsEmptyappResponse.isOk()) {
            logger.info("DialPageTaskComponent.checkTitle, 导入失败,内容填写不完整, responseData={}", checkDataIsEmptyappResponse);
            return AppResponse.failed(checkDataIsEmptyappResponse.getMsg());
        }

        return AppResponse.ok();
    }

    /**
     * 校验数据是否为空
     *
     * @param read
     * @return
     */
    private AppResponse<Object> checkDataIsEmpty(List<List<Object>> read) {

        // 去除最后的空行
        removeLastEmptyRow(read);
        StringBuffer message = new StringBuffer();
        StringBuffer emptyRowMsg = new StringBuffer();

        for (int i = 2; i < read.size(); i++) {
            if (read.get(i).size() == 0) {
                logger.info("DialPageTaskComponent.checkDataIsEmpty, 导入失败,数据单元格不能为空,{}", read.get(i).toString());
                emptyRowMsg.append("第").append(i - 1).append("行数据内容为空!").append("</br>");
            }
            if (read.get(i).size() < 4) {
                message.append("第").append(i - 1).append("行,内容填写不完整!" + String.valueOf(read.get(i)).replace("null", "")).append("</br>");
            }
            for (int j = 0; j < read.get(i).size(); j++) {
                if (StringUtils.equalsIgnoreCase(String.valueOf(read.get(i).get(j)), "null")) {
                    message.append("第").append(i - 1).append("行,第" + (j + 1) + "个单元格内容填写不完整!" + String.valueOf(read.get(i).get(j)).replace("null", "")).append("</br>");
                }
            }
        }

        if (StringUtils.isNotEmpty(emptyRowMsg.toString())) {
            return AppResponse.failed(emptyRowMsg.toString());
        }

        if (StringUtils.isNotEmpty(message.toString())) {
            return AppResponse.failed(message.toString());
        }

        return AppResponse.ok();
    }


    /**
     * 去除最后的空行
     *
     * @param read
     */
    public void removeLastEmptyRow(List<List<Object>> read) {

        for (int i = read.size() - 1; i >= 0; i--) {
            if (CollectionUtil.isNotEmpty(read.get(i))) {
                break;
            }
            read.remove(i);
        }
    }

    /**
     * 处理数据
     *
     * @param read 参数
     * @return List<WhiteList> 返回
     */
    public List<DialPageAddressResponseDTO> handleData(List<List<Object>> read) {
        List<DialPageAddressResponseDTO> resultData = new ArrayList<>();
        for (int i = 2; i < read.size(); i++) {
            DialPageAddressResponseDTO dialPageAddress = new DialPageAddressResponseDTO();
            dialPageAddress.setDialAddress(String.valueOf(read.get(i).get(0)).replace("null", ""));
            dialPageAddress.setNormalStatusCode(String.valueOf(read.get(i).get(1)).replace("null", ""));
            dialPageAddress.setPageSize(Integer.valueOf(String.valueOf(read.get(i).get(2)).replace("null", "")));
            dialPageAddress.setLoadTime(Integer.valueOf(String.valueOf(read.get(i).get(3)).replace("null", "")));
            resultData.add(dialPageAddress);
        }
        return resultData;
    }

文章来源地址https://www.toymoban.com/news/detail-637466.html

到了这里,关于模版下载和Excel文件导入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring boot 整合EasyPoi导入导出,下载模版功能

    name:Excel中的列名; width:指定列的宽度; needMerge:是否需要纵向合并单元格; format:当属性为时间类型时,设置时间的导出导出格式; desensitizationRule:数据脱敏处理,3_4表示只显示字符串的前3位和后4位,其他为*号; replace:对属性进行替换; suffix:对数据添加后缀。

    2024年02月11日
    浏览(31)
  • excel文件导入或导出Java代码示例

       判断excel的格式,同时兼容2003和2007  获取行数据  //获取excel列表内的对应数据格式 3、以下为可能会用到的导出实例文件,上传文件服务器的过程  File格式转换MultipartFile格式的例子   -------------------------------------以下无正文-----------------------------------------------------------

    2024年02月16日
    浏览(27)
  • Java下载excel模板文件

    最近做了一个导入Excel的功能,需求: 先提供一个下载Excel模板的功能。 用户下载好模板后,可以在模板文件当中填写要上传的内容,填写完过后再进行导入Excel,然后将用户填写的数据保存到数据库当中。 1.将模板放到resources目录下,尽量创建一个专门的文件夹来存放模板

    2024年02月15日
    浏览(35)
  • java中excel文件下载

    1、System.getProperty(user.dir) 获取的是启动项目的容器位置 2、 Files.copy(sourceFile.toPath(), destinationFile.toPath(), StandardCopyOption.REPLACE_EXISTING); StandardCopyOption.REPLACE_EXISTING 来忽略文件已经存在的异常,如果存在就去覆盖掉它 StandardCopyOption.COPY_ATTRIBUTES copy文件的属性,最近修改时间,最近

    2024年02月13日
    浏览(32)
  • Java下载Excel模板文件的实现

    在项目中经常会用到文件下载的功能,比如下载excel模板,这里简单记录一下实现过程 1、将模板文件放到项目资源文件目录中,也可以自定义其他位置,只要通过路径能找到该文件就行:  2、controller层写下载的接口 3、前端直接调用这个接口就可以实现下载啦

    2024年02月11日
    浏览(35)
  • [详细步骤]Java将Excel文件导入到数据库表中、并使用postman测试

    1、Maven依赖添加 2、需要使用的类 controller:ExcelController entity:ExcelEntity(设计此实体类,需要与excel文件一一对应) mapper:ExcelMapper service:ExcelServiceImpl、ExcelService util:ReadExcelUtil 3、代码 4、postman测试 file(excel)的文件路径需真实存在,下图进行设置路径、我的excel放在了

    2024年02月07日
    浏览(35)
  • JAVA下载Excel文件之后无法打开,提示损坏

    resources  目录下放模板 excel 文件,通过接口下载后,可以正常下载,但打不开。 问题:  springboot  项目简单的下载 excel  模板功能,模板放在 resources/template/ 目录中 代码挺简单,一运行,也挺顺利,很快就把文件下好了。点开看看,提示我可能是内存不足,文件无法打开,

    2024年02月12日
    浏览(39)
  • Java下载excel文件名中文乱码解决

    我是一名充满激情的程序员,💻希望和大家一起学习进步!我热爱编程,对技术充满好奇心和求知欲! 🗣️无论你是新手还是老手,都能从我的博客中获得有价值的内容! 🚀让我们一起努力,成为更优秀的程序员吧!💪💻 当使用Java下载Excel文件时,有时会遇到文件名中

    2024年02月07日
    浏览(39)
  • java设置可供下载的excel模板文件

    2024年01月19日
    浏览(24)
  • 使用python读Excel文件并写入另一个xls模版

    效果如下: 原文件内容 转化后的内容 大致代码如下: 1. load_it.py    2. gen_excel.py     

    2024年02月12日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包