SpringBoot-Projekt EasyExcel verwenden

SpringBoot-Projekt EasyExcel verwenden


Vorwort

EasyExcel ist ein Java-basiertes, schnelles und übersichtliches Excel-Verarbeitungstool, das den Speicherüberlauf großer Dateien behebt.
Damit können Sie Funktionen wie das Lesen und Schreiben von Excel schnell ausführen, ohne Faktoren wie Leistung und Speicher berücksichtigen zu müssen.

1. EasyExcel exportiert Daten auf die Festplatte

1. Abhängigkeit hinzugefügt

Auf EasyExcel muss man sich verlassen

 <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.1.0</version>
</dependency>

2. Schreiben Sie die Datei lokal

Schreiben Sie Daten in Excel und speichern Sie sie lokal

 public void dowloadDataExcel() {
    
    
        try {
    
    
            String fileName = "导出测试";
            //表头
            List<List<String>> heads = Lists.newArrayList();
            heads.add(Lists.newArrayList("姓名"));
            heads.add(Lists.newArrayList("英文名称"));
            heads.add(Lists.newArrayList("密码"));
            heads.add(Lists.newArrayList("角色"));
            heads.add(Lists.newArrayList("手机号"));
			// 数据
            List<List<String>> contents = Lists.newArrayList();
            for (int i = 0; i <= 10; i++) {
    
    
                List<String> content = Lists.newArrayList();
                for (int j = 0; j < 5; j++) {
    
    
                    content.add("第" + i + "行第" + j + "例内容");
                }
                contents.add(content);
            }

            EasyExcel.write("D:\\data\\test.xlsx")
            	.head(heads)
                .registerWriteHandler(new SimpleColumnWidthStyleStrategy(16)) // 列宽
                .sheet("数据").doWrite(contents);
        } catch (Exception e) {
    
    
            log.error("导出数据异常:{}", e.getMessage());
        }
    }

Die resultierende Ausgabe ist wie folgt
Fügen Sie hier eine Bildbeschreibung ein

2. EasyExcel exportiert benutzerdefinierte Vorlagen über die Schnittstelle

1. Stellen Sie die Vorlage zusammen und laden Sie sie über die Schnittstelle herunter

Schreiben Sie den Tabellenkopf in Excel und laden Sie ihn über den Browser herunter (Hinweis: Nach dem Nginx-Proxy kann der Dateistream manipuliert werden, wodurch die Datei beschädigt wird und nicht geöffnet werden kann.)

   @GetMapping("/export/excel")
    @Timed
    @ResponseStatus(HttpStatus.OK)
    public void dowloadExcel(HttpServletResponse response) {
    
    
        try {
    
    
            // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
            String fileName = URLEncoder.encode("用户模板", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");

            List<List<String>> heads = Lists.newArrayList();
            heads.add(Lists.newArrayList("姓名"));
            heads.add(Lists.newArrayList("英文名称*"));
            heads.add(Lists.newArrayList("密码*"));
            heads.add(Lists.newArrayList("角色"));
            heads.add(Lists.newArrayList("手机号"));

            EasyExcel.write(response.getOutputStream())
                .head(heads)
                .registerWriteHandler(new SimpleColumnWidthStyleStrategy(16))
                .sheet("用户数据")
                .doWrite(null);
        } catch (Exception e) {
    
    
            e.printStackTrace();
            log.error("导出模板异常:{}", e.getMessage());
        }
    }

Die resultierende Ausgabe ist wie folgt
[Externer Link-Bildtransfer fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Diebstahl-Link-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-tfatQEDm-1676599385893)(https://img-blog.csdnimg.cn/ b405186638204d2b962abcb650410b88.png)]

3. EasyExcel fügt Excel-Standard-Dropdown-Daten hinzu

1.Dropdown-Daten für Excel-Spalteneinstellungen

Wir setzen die Rollenspalte auf die Standard-Dropdown-Daten
1, benutzerdefinierte Verarbeitungsklasse

public class CustomSheetWriteHandler implements SheetWriteHandler {
    
    



    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
    
    

    }

    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
    
    
        //定义一个map key是需要添加下拉框的列的index value是下拉框数据
        Map<Integer, String[]> mapDropDown = new HashMap<>(3);
        //设置单位身份 值写死
        String[] role = {
    
    "系统管理员","平台管理员","数据工程师","配置管理员"};
        //下拉选在Excel中对应的第4列
        mapDropDown.put(3,role);

        //获取工作簿
        Sheet sheet = writeSheetHolder.getSheet();
        ///开始设置下拉框
        DataValidationHelper helper = sheet.getDataValidationHelper();
        //设置下拉框
        for (Map.Entry<Integer, String[]> entry : mapDropDown.entrySet()) {
    
    
            /*起始行、终止行、起始列、终止列  起始行为1即表示表头不设置**/
            CellRangeAddressList addressList = new CellRangeAddressList(1, 65535, entry.getKey(), entry.getKey());
            /*设置下拉框数据**/
            DataValidationConstraint constraint = helper.createExplicitListConstraint(entry.getValue());
            DataValidation dataValidation = helper.createValidation(constraint, addressList);
            sheet.addValidationData(dataValidation);
        }
    }
}

Zum Generieren von Excel verwenden

   public void dowloadExcel(HttpServletResponse response) {
    
    
        try {
    
    
            // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
            String fileName = URLEncoder.encode("用户模板", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");

            List<List<String>> heads = Lists.newArrayList();
            heads.add(Lists.newArrayList("姓名"));
            heads.add(Lists.newArrayList("英文名称*"));
            heads.add(Lists.newArrayList("密码*"));
            heads.add(Lists.newArrayList("角色"));
            heads.add(Lists.newArrayList("手机号"));

            EasyExcel.write(response.getOutputStream())
                .head(heads)
                .sheet("用户数据")
                .registerWriteHandler(new SimpleColumnWidthStyleStrategy(16))
                .registerWriteHandler(new CustomSheetWriteHandler())
                .doWrite(null);

        } catch (Exception e) {
    
    
            e.printStackTrace();
            log.error("导出模板异常:{}", e.getMessage());
        }
    }

Die resultierende Ausgabe ist wie folgt
Fügen Sie hier eine Bildbeschreibung ein

4. EasyExcel liest Excel-Daten

1. Analysieren Sie Excel, um Daten zu lesen

Lesen Sie die Excel-Daten. Hier lesen Sie jede Zeile und Spalte und konvertieren dann das Objekt, das Sie verarbeiten möchten. EasyExcel bietet auch eine Methode zum direkten Zuordnen der Daten zur Entität. Sie können es selbst lernen

  public List<User> excelHandle(MultipartFile multipartFile) {
    
    
        List<User> list = new ArrayList<>();
        byte[] bytes;
        try {
    
    
            bytes = multipartFile.getBytes();
        } catch (IOException e) {
    
    
            log.error("excel解析异常:{}", e.getMessage());
            throw new BadRequestAlertException(ErrorCodes.INNER_ERROR, "excel解析异常");
        }
        try {
    
    
            InputStream inputStream = new ByteArrayInputStream(bytes);
            List<Map<Integer, String>> maps = ExcelUtils.readExcel(inputStream);
            for (int i = 0; i < maps.size(); i++) {
    
    
                Map<Integer, String> bookMaps = maps.get(i);
                User user = pauseUserDto(bookMaps);
                list.add(user);
            }
        } catch (Exception e) {
    
    
            log.error("上传表格数据异常:{}", e.getMessage());
            throw new BadRequestAlertException(ErrorCodes.INNER_ERROR, "上传表格数据异常,检查后重试");
        }
        return list;
    }

Zusammenfassen

Das Obige ist die SpringBoot-Integration von EasyExcel. Die beiden einfachsten Verwendungsmöglichkeiten sind Import und Export. Excel kann auch viele andere Funktionen implementieren, z. B. das Lesen von Excel-Daten und Objektbindungsvorgänge usw., die später der Reihe nach vorgestellt werden.

Je suppose que tu aimes

Origine blog.csdn.net/Oaklkm/article/details/129078606
conseillé
Classement