Java implements front-end data export operation

front end

<el-button class="export" type="primary" icon="el-icon-download" @click="exportData()">导出</el-button>


    exportData() {
        //data 操作data 变成后端需要的格式
        let data = {
            capacityVos: resultVo
          }
        this.$confirm("是否确认导出曲线信息?", "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(response => {
        exportExcelData(data).then(res => {
          if (res.code == 200) {
            this.jnpf.downloadFile(res.data.url)  
          }
        })
      })
    }

Front-end jumps to back-end

// 导出
export function exportExcelData(data) {
  return request({
    url: define.api + '/user/export',
    method: 'post',
    data:data,
  });
}

Template excel

backend interface

    //xAxixAndData 导出的数据
    @ApiOperation("导出Excel")
    @PostMapping("/export")
    public ActionResult export(@RequestBody XAxixAndData xAxixAndData){
        Map<String, Object> map = new HashMap<>();
        List<Map<String, Object>> vos = hisCapacityService.getByOne(xAxixAndData);
        List<Map<String,String>> names = hisCapacityService.getDataName(xAxixAndData);
        map.put("data", vos);
        map.put("names", names);

        //1.获取导出模板地址Curve
        ClassPathResource classPathResource = new ClassPathResource("static/CurveModel.xlsx");
        String path = classPathResource.getPath();
        TemplateExportParams templateExportParams = new TemplateExportParams(path);
        // 2.执行excel导出
        Workbook workbook = ExcelExportUtil.exportExcel(templateExportParams, map);
        //3.获取到第0个sheet
        Sheet sheet = workbook.getSheetAt(0);
        //4.创建标题行 数据有几列--标题合并居中有几列
        List<Map<String,String>> names1 = (List) map.get("names");
        int num = names1.size();
        Row titleRow = sheet.createRow(0);
        Cell titleCell = titleRow.createCell(0);
        if(ObjectUtil.isNotNull(xAxixAndData.getVos())){
            //风电
            titleCell.setCellValue("风电出力曲线");
        }else if(ObjectUtil.isNotNull(xAxixAndData.getCapacityVos())){
            //光伏
            titleCell.setCellValue("光伏出力曲线");
        }else if(ObjectUtil.isNotNull(xAxixAndData.getCurveVos())){
            //曲线目录
            titleCell.setCellValue(xAxixAndData.getCurveVos().get(0).getName());
        }
        CellRangeAddress range = new CellRangeAddress(
                0, // first row (0-based)
                0, // last row
                0, // first column (0-based)
                num  // last column
        );
        sheet.addMergedRegion(range);
        Font font = workbook.createFont();
        Font font2 = workbook.createFont();
        font.setFontHeightInPoints((short) 14); // 设置字体大小
        font.setBold(true); // 设置加粗
        font2.setBold(true);
        CellStyle style = workbook.createCellStyle();
        CellStyle style2 = workbook.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);// 设置单元格格式为居中
        style2.setAlignment(HorizontalAlignment.CENTER);
        style.setFont(font);
        style2.setFont(font2);
        titleCell.setCellStyle(style);
        //5.创建列名所在的行
        Row columnRow = sheet.createRow(1);
        Cell columnRowCell = columnRow.createCell(0);
        columnRowCell.setCellValue("时刻");
        columnRowCell.setCellStyle(style2);
        for (int i = 1; i <= names1.size(); i++) {
            Cell columnRowCell1 = columnRow.createCell(i);
            columnRowCell1.setCellValue(names1.get(i-1).get("name"));
            columnRowCell1.setCellStyle(style2);
        }

        //6.循环row设置行高自适应
        for(int i = 0;i <= sheet.getLastRowNum();i ++){
            XSSFRow xssfRow = (XSSFRow) sheet.getRow(i);
            CTRow ctRow = xssfRow.getCTRow();
            ctRow.setCustomHeight(false);
        }
        //7.设置列宽
        List<Map<String, Object>> data = (List) map.get("data");
        for (int i = 1; i < data.size(); i++) {
            sheet.setColumnWidth(i,10 * 256);
        }
        //8.重命名第0个sheet名称
        workbook.setSheetName(0, "曲线数据");
        DownloadVO vo = this.creatModelExcel(fileApi.getPath(FileTypeEnum.TEMPORARY), userInfo, workbook);
        return ActionResult.success(vo);
    }

Backend--Export table

    /***
     * 导出表格
     * @Author lixi
     * @date 2023-09-14
     * @return jnpf.base.vo.DownloadVO
     **/
    public DownloadVO creatModelExcel(String path, UserInfo userInfo, Workbook workbook) {
        DownloadVO vo = DownloadVO.builder().build();
        String sheetName =  "名字";
        ExportParams exportParams = new ExportParams(null, sheetName);
        exportParams.setType(ExcelType.XSSF);
        try {
            String name = sheetName + ".xlsx";
            @Cleanup ByteArrayOutputStream output = new ByteArrayOutputStream();
            workbook.write(output);
            byte[] barray = output.toByteArray();
            //将Excel文件二进制转为inputstream对象
            @Cleanup InputStream ins = new ByteArrayInputStream(barray);
            //上传文件
            GetStrategy.getInstance(fileCoreProperties.getDefaultPlatform()).uploadFile(path.toLowerCase(), FileTypeEnum.TEMPORARY, name, ins);
            vo.setName(name);
            vo.setUrl(UploaderUtil.uploaderFile(userInfo.getId() + "#" + name + "#" + "Temporary"));
        } catch (Exception e) {
            log.error("信息导出Excel错误:{}", e);
        }
        return vo;
    }

The front end displays the exported results on the web page

 exportExcelData(data).then(res => {
          if (res.code == 200) {
//调用this.jnpf.downloadFile方法即可
            this.jnpf.downloadFile(res.data.url)  
          }
 })

Guess you like

Origin blog.csdn.net/xy58451921/article/details/133386216