EasyExcel使用上傳文件爲模板寫回瀏覽器

示例使用上傳的文件寫回到瀏覽器

@PostMapping("/importExcelWriteIt")
    public void importExcelWriteIt(@RequestParam("file") MultipartFile file, HttpServletResponse response) throws IOException {
        // 一、設置響應頭
        response.setHeader("Content-Type", "application/octet-stream");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + System.currentTimeMillis() + ".xlsx");
        // 二、寫的對象
        ExcelWriterBuilder writeBuilder = new ExcelWriterBuilder();
        // 設置回寫到瀏覽器
        writeBuilder.file(response.getOutputStream());
        // 使用請求的模板直接修改後返回
        writeBuilder.withTemplate(file.getInputStream());
        writeBuilder.inMemory(true);
        ExcelWriter excelWriter = writeBuilder.build();
        // 創建sheet
        ExcelWriterSheetBuilder sheetBuilder = new ExcelWriterSheetBuilder();
        sheetBuilder.sheetName("1");
        excelWriter.write(Collections.emptyList(), sheetBuilder.build());
        XSSFSheet sheet = (XSSFSheet) excelWriter.writeContext().writeSheetHolder().getSheet();
        // 獲取指定行後寫到指定單元格
        XSSFRow row = sheet.getRow(1);
        XSSFCell cell = row.createCell(2);
        cell.setCellValue("寫入了");

        excelWriter.finish();
    }

使用上傳的文件進行加工發送

@PostMapping("/importExcelWriteIt")
    public void importExcelWriteIt2(@RequestParam("file") MultipartFile file, HttpServletResponse response) throws IOException {
        // 寫的對象
        ExcelWriterBuilder writeBuilder = new ExcelWriterBuilder();
        writeBuilder.withTemplate(file.getInputStream());
        writeBuilder.inMemory(true);
        // 寫到這裏面
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        writeBuilder.file(out);

        ExcelWriter excelWriter = writeBuilder.build();
        ExcelWriterSheetBuilder sheetBuilder = new ExcelWriterSheetBuilder();
        sheetBuilder.sheetName("1");
        excelWriter.write(Collections.emptyList(), sheetBuilder.build());
        XSSFSheet sheet = (XSSFSheet) excelWriter.writeContext().writeSheetHolder().getSheet();
        XSSFRow row = sheet.getRow(1);
        XSSFCell cell = row.createCell(2);
        cell.setCellValue("寫入了");

        excelWriter.finish();

        // 在此處可以講此文件流發送等 示例

        String uploadFileUrl = "http://logistics-file-atomic/oss/file/upload/sdk";
        MultiValueMap<String, Object> multipart = new LinkedMultiValueMap<>();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentDispositionFormData("file", file.getOriginalFilename());
        multipart.add("file", new HttpEntity<>(new ByteArrayResource(out.toByteArray()), headers));
        multipart.add("userCode", "c-pms");
        multipart.add("bucket", "c-pms");
        multipart.add("businessKey", "C-PMS");
        multipart.add("contentType", "application/octet-stream");
        multipart.add("publicRead", 1);

        restTemplate.postForObject(uploadFileUrl, multipart, Map.class);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章