上传 Excel 文件进行数据库比对--增加导出功能

一、确认pom.xml中存在poi依赖

复制代码
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.5</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.5</version>
</dependency>

二、在FileController中增加导出方法

复制代码
@GetMapping("/export-results")
public ResponseEntity<byte[]> exportResultsToExcel(HttpSession session) {
    try {
        // ✅ 改为 UserInfo
        @SuppressWarnings("unchecked")
        List<UserInfo> results = (List<UserInfo>) session.getAttribute("matchResults");

        if (results == null || results.isEmpty()) {
            return ResponseEntity.notFound().build();
        }

        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("身份证比对结果");

        Row header = sheet.createRow(0);
        header.createCell(0).setCellValue("ID");
        header.createCell(1).setCellValue("姓名");
        header.createCell(2).setCellValue("身份证号码");

        for (int i = 0; i < results.size(); i++) {
            UserInfo user = results.get(i); // ← 这里是 UserInfo
            Row row = sheet.createRow(i + 1);
            row.createCell(0).setCellValue(user.getId() != null ? user.getId() : 0L);
            row.createCell(1).setCellValue(user.getName() != null ? user.getName() : "");
            row.createCell(2).setCellValue(user.getIdCard() != null ? user.getIdCard() : "");
        }

        sheet.autoSizeColumn(0);
        sheet.autoSizeColumn(1);
        sheet.autoSizeColumn(2);

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        workbook.write(out);
        workbook.close();

        String timestamp = java.time.LocalDateTime.now()
                .format(java.time.format.DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss"));
        String filename = "身份证比对结果_" + timestamp + ".xlsx";
        String encodedFilename = java.net.URLEncoder.encode(filename, "UTF-8")
                .replaceAll("\\+", "%20");

        return ResponseEntity.ok()
                .header(org.springframework.http.HttpHeaders.CONTENT_DISPOSITION,
                        "attachment; filename=\"" + encodedFilename + "\"; filename*=UTF-8''" + encodedFilename)
                .header(org.springframework.http.HttpHeaders.CONTENT_TYPE,
                        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
                .body(out.toByteArray());

    } catch (Exception e) {
        e.printStackTrace();
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }
}

三、在你原来的 /upload POST 处理方法中,将 results 存入 session

复制代码
 @PostMapping("/upload")
    public String handleUpload(@RequestParam("file") MultipartFile file,
                               Model model,
                               HttpSession session) { // <-- 添加 HttpSession 参数

        // 清除之前的结果(可选,但推荐)
        session.removeAttribute("matchResults");

        if (file.isEmpty()) {
            model.addAttribute("error", "请选择一个 Excel 文件");
            return "upload";
        }

        try {
            List<UserInfo> matchedUsers = excelService.processExcel(file);

            // ✅ 将结果保存到 session,供导出使用
            session.setAttribute("matchResults", matchedUsers);

            model.addAttribute("results", matchedUsers);
            model.addAttribute("count", matchedUsers.size());

        } catch (IOException e) {
            model.addAttribute("error", "文件读取失败:" + e.getMessage());
        } catch (IllegalArgumentException e) {
            model.addAttribute("error", "Excel 格式错误:" + e.getMessage());
        }

        return "upload";
    }

四、清除 session

复制代码
@GetMapping("/clear")
public String clearSession(HttpSession session) {
    session.removeAttribute("matchResults");
    return "redirect:/upload";
}

五、在 HTML 页面添加"导出 Excel"按钮,清空按钮方法修改为/clear

复制代码
<!-- 清空按钮 -->
<div class="actions">
    <button type="button" onclick="window.location.href='/clear'">清空记录</button>
</div>
<!-- 导出按钮 -->
<button type="button" onclick="window.location.href='/export-results'"
        style="margin-left: 10px; background-color: #4CAF50; color: white;">
    📥 导出 Excel
</button>
相关推荐
蟕初的梦想8 分钟前
Claude Haiku 5.5 效能实测与场景应用指南
数据库·人工智能·大模型
专注API从业者23 分钟前
告别复杂页面解析,OpenClaw 快速搭建电商商品监控与数据分析脚本
大数据·数据库·python·数据挖掘·数据分析
naturliche44 分钟前
sgx支持数据库环境配置,编译,debug
数据库·编译·sgx
SelectDB1 小时前
Apache Doris x Fluss:面向湖流一体的统一查询与分析
大数据·数据库·数据分析
云贝贝贝1 小时前
Oracle 备份恢复实战:RMAN 备份、恢复与误删闪回
数据库
java1234_小锋1 小时前
【技术专题】Mysql8 数据库 - Mysql8 触发器
数据库·mysql·mysql8
要吃这碗饭1 小时前
AI 智能体如何通过 auth.md 注册 Bright Data 账号
数据库·人工智能·php
薛晓刚1 小时前
Oracle ADG 备库归档丢了怎么办?RMAN 增量前滚实战
数据库·oracle
Highcharts.js1 小时前
用Highcharts开发动态主从图表|双图联动的时间序列图表示例
javascript·数据库·信息可视化·highcharts·图表开发·动态图表
阿俊-全栈开发1 小时前
LikeShop 版本升级与备份:从旧版平滑迁移的完整步骤
jvm·数据库·oracle·开源·likeshop·likeshop开源商城