导入复杂excel

这篇博客介绍了如何在前端和后端处理复杂Excel文件的导入操作。客户端发起请求,服务器通过ReadExcel类解析并处理文件。

在这里插入图片描述
前台页面:

//导入(预)他类Excel文件
在这里插入图片描述

function importTaLeiExcel() {
    $("#sCategoryTaleiImport").combobox({disabled : false});
    $('#importmentTaleiForm').form('clear');//清空原来的数据
    //$('#importmentAcceptListForm').form('clear');//清空原来的数据
    $('#ImportTaleiExcelDialog').dialog('open').dialog('setTitle', '导入(预)他项文件');
}
//确认导入预他excel按钮
function saveTaleiList() {
    debugger;
    var fileEle = document.getElementById("excelTaleifiles");
    if(fileEle.files.length == 0){
        $.messager.alert("提示", "请选择待上传的Excel文件", "info");
        return;
    }
    var formData = new FormData();
    for(var i=0; i<fileEle.files.length; i++){
        formData.append('file', fileEle.files[i]);
        console.log("add file ..., ", fileEle.files[i]);
    }
    var cate
### 使用 Apache POI 和 EasyExcel 处理复杂 Excel 文件 在 Spring 框架中,可以利用 **Apache POI** 或者 **EasyExcel** 来处理复杂Excel 文件。以下是两种方式的具体实现: #### 一、使用 Apache POI 实现复杂 Excel导入 Apache POI 是一个功能强大的 Java 库,支持读写 Microsoft Office 文档,特别是 Excel 文件。对于复杂的数据结构,可以通过以下代码示例完成。 ```java public List<Map<String, Object>> complexExcelRead(String filePath) throws IOException { List<Map<String, Object>> result = new ArrayList<>(); // 打开文件输入流 try (FileInputStream fis = new FileInputStream(new File(filePath))) { Workbook workbook = new XSSFWorkbook(fis); // 获取第一个表格 Sheet sheet = workbook.getSheetAt(0); // 遍历每一行数据 for (int i = 1; i <= sheet.getLastRowNum(); i++) { // 跳过表头 Map<String, Object> rowData = new HashMap<>(); Row row = sheet.getRow(i); if (row != null) { // 假设第一列为姓名,第二列为年龄,第三列为地址 String name = getCellValue(row.getCell(0)); Integer age = getIntValue(row.getCell(1)); String address = getCellValue(row.getCell(2)); rowData.put("name", name); rowData.put("age", age); rowData.put("address", address); result.add(rowData); } } } return result; } private String getCellValue(Cell cell) { if (cell == null || cell.getCellType() == CellType.BLANK) { return ""; } switch (cell.getCellType()) { case STRING: return cell.getStringCellValue(); case NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { return cell.getDateCellValue().toString(); } else { return String.valueOf((long) cell.getNumericCellValue()); } default: return ""; } } private Integer getIntValue(Cell cell) { if (cell == null || cell.getCellType() == CellType.BLANK) { return null; } if (cell.getCellType() == CellType.NUMERIC) { return (int) Math.round(cell.getNumericCellValue()); } return null; } ``` 上述代码展示了如何解析多列并将其转换为 `Map` 数据结构[^3]。可以根据实际需求调整字段映射逻辑。 --- #### 二、使用 EasyExcel 实现复杂 Excel导入 相比 Apache POI,Alibaba 提供的 EasyExcel 更加轻量级且性能优越,适合大规模数据场景下的导入导出操作。 ##### 1. 添加 Maven 依赖 首先,在项目的 `pom.xml` 文件中引入 EasyExcel 依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.0.5</version> </dependency> ``` ##### 2. 定义实体类 假设有一个学生信息表,包含姓名、年龄和地址三个字段,则定义如下实体类: ```java import com.alibaba.excel.annotation.ExcelProperty; public class StudentImportExcelForm { @ExcelProperty(index = 0) private String name; @ExcelProperty(index = 1) private Integer age; @ExcelProperty(index = 2) private String address; // Getter and Setter methods... } ``` ##### 3. 编写服务层方法 编写用于导入 Excel 文件的服务层方法: ```java @Service public class ExcelService { /** * 导入Excel中的学生信息 * * @param file 用户上传的Excel文件 */ public void importExcelData(MultipartFile file) { try { EasyExcel.read(file.getInputStream(), StudentImportExcelForm.class, new AnalysisEventListener<StudentImportExcelForm>() { @Override public void invoke(StudentImportExcelForm data, AnalysisContext context) { // 将每一条记录保存到数据库或其他存储介质中 saveToDatabase(data); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 全部解析完成后执行的操作 } }).sheet().doRead(); } catch (IOException e) { throw new RuntimeException("Failed to read Excel file.", e); } } private void saveToDatabase(StudentImportExcelForm student) { // TODO: Save the student object into database or other storage. } } ``` 此部分实现了逐条读取 Excel 行并将对象传递给回调函数的功能[^4]。 --- #### 总结 无论是使用 Apache POI 还是 Alibaba EasyExcel,都能满足复杂 Excel 文件的导入需求。如果项目对性能要求较高或者涉及大量数据,推荐使用 EasyExcel;而对于更灵活的自定义操作,可以选择 Apache POI。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值