• easyPoi框架的excel导入导出


    一 导出

    <a-button @click="exportDataList" icon="download" type="success" style="margin-right: 8px">导出数据</a-button>
     //导出表格
        exportDataList () {
          //导出表格的查询条件
          this.queryParam.type = this.activeKey
          //导出
          exportData(this.queryParam).then(res => {
            //创建二进制数据对象
            const blbo = new Blob([res], { type: 'application/vnd.ms-excel;charset=utf-8' })
            //创建a标签
            const link = document.createElement('a')
            //创建一个指向二进制文件的URL
            link.href = window.URL.createObjectURL(blbo)
            //文件名
            link.download = '物流公司信息.xls'
            //触发下载
            link.click()
          })
        },
     /**
         * 导出物流公司信息
         *
         * @param fisLogisticsCompanyInfo 导出实体类
         * @param commonQuery             //查询参数
         * @param response                //http响应
         */
        @SneakyThrows
        @GetMapping("/logisticsCompany/export")
        @ApiOperation(value = "导出物流公司信息")
        public void export(FisLogisticsCompanyInfo fisLogisticsCompanyInfo, CommonQuery commonQuery, HttpServletResponse response) {
            //导出的查询条件
            QueryWrapper<FisLogisticsCompanyInfo> autoQueryWrapper = QueryGenerator.initQueryWrapper(fisLogisticsCompanyInfo, commonQuery);
            //查询出所有要导出的数据
            List<FisLogisticsCompanyInfo> fisLogisticsCompanyInfos = fisLogisticsCompanyInfoService.list(autoQueryWrapper);
            //利用导出工具类将数据导出
            Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("物流公司信息", "container"),
                    FisLogisticsCompanyInfo.class, fisLogisticsCompanyInfos);
            //写道输出流
            workbook.write(response.getOutputStream());
        }

    二 下载导入

     //导入向导按钮 点击调用importData方法 
    <a-button @click="importData" icon="upload" style="margin-right: 8px" type="plain">导入向导</a-button>
    //触发组件的show方法 展示文件上传页面
    importData () { 

       this.$refs.BImportFile.show()
        },
    //当前页面使用了文件上传组件 
    <b-import-file @ok="queryPage" :actionUrl="actionUrl" :des="des" ref="BImportFile" @download="download"/>
    //引入文件上传组件
    import BImportFile from '@/components/BImportFile'
    //注册到组件
    components: { MESSuperQuery, modalForm, BImportFile //封装好的导入组件 },
    //点击组件的下载导入模板  触发组件的download 
    <div @click='download' class='upload-dragger'> <a-upload-dragger :headers='headers' :multiple='true' :openFileDialogOnClick='false' @change='handleChange' action='/api/storage/upload' name='file' > <p class='ant-upload-drag-icon'> <a-icon type='cloud-download' /> </p> <p class='ant-upload-text'>先下载要上传的模板</p> <p class='ant-upload-hint'> 支持扩展名:xls,xlsx </p> </a-upload-dragger> </div>
    //向父组件传递事件
    download() {
    this.$emit('download') },
     //父组件接受子组件传来的事件 下载excel模板
        download () {
          logisticsCompanyTemplate().then(res => {
            //创建二进制数据对象
            const blbo = new Blob([res], { type: 'application/vnd.ms-excel;charset=utf-8' })
            //创建a标签
            const link = document.createElement('a')
            //创建一个指向二进制文件的URL
            link.href = window.URL.createObjectURL(blbo)
            link.download = '物流公司导入模板.xlsx'
            //点击a标签
            link.click()
          }).catch((e) => {
            this.$message.warning('下载失败')
          })
        },
     /**
         * 下载物流公司导入模板
         *
         * @return
         */
        @SneakyThrows
        @GetMapping("/logisticsCompany/template")
        @ApiOperation(value = "物流公司导入模板")
        public void downTemplate(HttpServletResponse response) {
            //获取数据库中模板文件名称
            String rfidTemplate = Global.getConfig("logisticsCompanyTemplate");
            //获取bucketName 默认bootfile
            String bucketName = Global.getConfig("sys.file.bucketName", "bootfile");
            //根据buckName和文件名称返回二进制流
            S3Object object = minioTemplate.getObject(bucketName, rfidTemplate);
            IoUtil.copy(object.getObjectContent(), response.getOutputStream());
        }

    三 导入

    <div
              class='upload-dragger'
            >
              <a-upload-dragger
                :beforeUpload='beforeFileUpload'
                :fileList='fileList'
                :headers='headers'
                :multiple='true'
                @change='handleChange'
                :action='actionUrl'
                name='file'
              >
                <p class='ant-upload-drag-icon'>
                  <a-icon type='cloud-upload' />
                </p>
                <p class='ant-upload-text'>上传要导入的文件</p>
                <p class='ant-upload-hint'>
                  支持扩展名:xls,xlsx
                </p>
              </a-upload-dragger>
            </div>
     /**
         * 导入物流公司信息
         *
         * @param file
         * @return
         */
        @SneakyThrows
        @PostMapping("/uploadBom")
        public Result upload(@RequestParam("file") MultipartFile file) {
    
            List<FisLogisticsCompanyInfo> logisticsCompanyInfoList = FileUtil.importExcel(file, 0, 1, FisLogisticsCompanyInfo.class);
    
    
            logisticsCompanyInfoList = logisticsCompanyInfoList.stream().map(fisLogisticsCompanyInfo -> {
                fisLogisticsCompanyInfo.setUpdateBy(SecurityUtil.getUser().getUserId());
                fisLogisticsCompanyInfo.setCreateBy(SecurityUtil.getUser().getUserId());
                fisLogisticsCompanyInfo.setUpdateTime(new Date());
                fisLogisticsCompanyInfo.setCreateTime(new Date());
                return fisLogisticsCompanyInfo;
            }).collect(Collectors.toList());
            fisLogisticsCompanyInfoService.saveBatch(logisticsCompanyInfoList);
    
            return Res.ok();
        }
     public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass) {
            if (file == null) {
                return null;
            }
            ImportParams params = new ImportParams();
            params.setTitleRows(titleRows);
            params.setHeadRows(headerRows);
            List<T> list = null;
            ZipSecureFile.setMinInflateRatio(-1.0d);
            try {
                list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);
            } catch (NoSuchElementException e) {
    //            System.out.println("excel文件不能为空");
                throw new NoSuchElementException("excel文件不能为空");
            } catch (Exception e) {
                System.out.println(e.getMessage());
    //            throw new NormalException();
                throw new NoSuchElementException(e.getMessage());
            }
            return list;
        }

     

  • 相关阅读:
    面试只要问到分布式,必问分布式锁
    Java编程中忽略这些细节,Bug肯定找上你
    不止承上启下,带你了解工业物联网关
    论文解读二十七:文本行识别模型的再思考
    并发高?可能是编译优化引发有序性问题
    论文解读丨LayoutLM: 面向文档理解的文本与版面预训练
    SQL优化老出错,那是你没弄明白MySQL解释计划
    SQL反模式学习笔记1 开篇
    SQL Server中自定义函数:用指定的分隔符号分割字符串
    .NET软件开发与常用工具清单
  • 原文地址:https://www.cnblogs.com/fxzemmm/p/14864646.html
Copyright © 2020-2023  润新知