EasyExcel---易错点总结

本文探讨了在使用EasyExcel进行大数据量Excel导出时遇到的POI版本兼容问题,着重介绍了如何确保POI为3.17版本以避免功能异常,并针对web环境下无法通过AJAX下载Excel文件给出了处理方法。同时,还解决了文件上传时重名问题的解决方案,通过JavaScript组件管理重复上传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

easyexcel和poi冲突

使用easyexcel大数据量导出时,需要依赖org.apache.poi的3.17版的jar包,而poi3.17与3.8/3.9版本之间方法变动比较大,会导致easyexcel不能正常使用。所以需要确保poi为3.17版本的

web下载不了excel

web下载,不能用ajax调用下载,后端响应的是二进制数据,JQUERY的AJAX只能接收JSON等数据。

如何解决:

   <button type="button" class="btn btn-submit" style="margin-left:10px;margin-right:10px; float:right;"  id="all_export">
    <i class="glyphicon glyphicon-import"></i>导出资产信息</button>       

 		//excel导出按钮,不可以用ajax
        $("#all_export").bind({
            click: function () {
                window.location.href="/device/excel/export.htm";
            }
        });

file上传不能重复上传同名称的文件

文件名是通过 change 事件,获取文件信息后,显示到文本框内的,由于是同一个文件名,没有触发 change 事件。

如何解决:

  • 用成熟的js组件
  • 你只需要在上传成功的回调里面,将当前input的value值置空即可。event.target.value="";
<< 将表格数据导出到 Excel 文件的技术通常依赖于 Java 中的一些第三方库来简化操作。最常用的是 Apache POIEasyExcel 这两个开源工具。 ### 使用 Apache POI 导出 Excel 数据 Apache POI 是一个功能强大的库,支持生成 Microsoft Office 格式的文件(如 Word、Excel)。对于 Excel 操作,它支持 `.xls` (HSSF) 和 `.xlsx` (XSSF) 格式。 以下是一个简单的示例代码,演示如何使用 Apache POI 将数据写入 Excel: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io.IOException; public class ExportToExcel { public static void main(String[] args) throws IOException { // 创建一个新的工作簿 Workbook workbook = new XSSFWorkbook(); // 在工作簿中创建一张表单(sheet) Sheet sheet = workbook.createSheet("用户信息"); // 定义标题行的数据 String[] headers = {"ID", "姓名", "年龄"}; // 添加第一行为标题 Row headerRow = sheet.createRow(0); for(int i=0; i < headers.length; i++) { Cell cell = headerRow.createCell(i); cell.setCellValue(headers[i]); } // 填充表格内容 Object[][] data = { {1, "张三", 25}, {2, "李四", 30}, {3, "王五", 28} }; int rowNum = 1; for(Object[] rowData : data){ Row row = sheet.createRow(rowNum++); int colNum = 0; for(Object field : rowData){ Cell cell = row.createCell(colNum++); if(field instanceof Integer){ cell.setCellValue((Integer)field); } else{ cell.setCellValue((String)field); } } } try(FileOutputStream outputStream = new FileOutputStream("用户信息.xlsx")){ workbook.write(outputStream); // 写入文件流 } workbook.close(); // 关闭工作簿资源 System.out.println("Excel 已成功生成!"); } } ``` **解释**: - `Workbook`: 表示整个 Excel 文档。 - `Sheet`: 对应于文档中的某一页或某个工作表。 - `Row` & `Cell`: 分别表示一行与单元格的概念。 - 上述代码先定义了一个包含 ID、姓名和年龄的工作表,并填充了若干条测试记录后保存为本地文件。 #### 易错分析: 如果直接关闭输出流而没有调用 `workbook.write()` 方法,则不会有任何数据被实际写进目标文件里;另外需要注意内存管理的问题,在处理较大规模数据时推荐采用 SXSSF 来代替常规的 HSSSF 或者 XSSFSolution 方案,因为后者会占用大量 JVM 的堆空间。 ### 使用 EasyExcel 导出 Excel 数据 EasyExcel 是阿里巴巴推出的一个轻量级框架,专门用来读取/写出大容量的 Excel 文件。相比起传统的 Apache POI,它的性能更高且更易于上手。 简单例子如下所示: ```java import com.alibaba.excel.EasyExcel; import java.util.ArrayList; import java.util.List; // 实体类用于映射字段名以及类型转换规则等逻辑封装 class UserData { private Long id; private String name; private Integer age; public UserData(Long id, String name, Integer age){ this.id=id; this.name=name; this.age=age; } /* Getters and Setters */ } public class EasyExportExample { public static void main(String[] args) { String fileName="easy_excel_output.xlsx"; List<UserData> dataList=new ArrayList<>(); dataList.add(new UserData(1L,"小明",19)); dataList.add(new UserData(2L,"小白",26)); // 参数依次分别是:要存储的位置路径+文件名称,对应实体类型的Class对象实例以及最终传入的具体列表值集 EasyExcel.write(fileName).head(UserData.class).sheet("人员档案").doWrite(dataList); System.out.println("已通过 EasyExcel 成功完成数据写入"); } } ``` 上述过程主要分为三个步骤:配置好待填写的内容集合 -> 设置头部结构样式信息 -> 执行真正的写磁盘动作即可. --- ### 总结对比两者的优缺: | 功能特 | Apache POI | Alibaba EasyExcel | |------------------|-----------------------------------------|--------------------------------| | **灵活性** | 提供细粒度控制选项 | 更加简洁快速但定制化能力有限 | | **适用场景** | 需求复杂报表设计 | 只需单纯导入导出大批量基础型业务 | | **学习成本** | 较高 | 相对较低 |
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值