博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
阿里 EasyExcel 使用及避坑
阅读量:5901 次
发布时间:2019-06-19

本文共 4427 字,大约阅读时间需要 14 分钟。

github地址:

原本在项目中使用EasyPoi读取excel,后来为了统一技术方案,改用阿里的EasyExcel。EasyExcel和EasyPoi有一定的相似之处。

EasyExcel和EasyPoi效率对比:

因为数据量少,从效率上看几乎没有差别,EasyExcel略胜一筹。

 

使用maven的方式引用EasyExcel

com.alibaba
easyexcel
1.1.2-beat1

使用Java模型的方式使用easyexcel

Java模型

@Datapublic class TotalAmount extends BaseRowModel implements Serializable {        private Integer id;    @ExcelProperty(value ="类型",index = 0)    private String type;//开支类型 信用卡等    @ExcelProperty(value = "金额",index =1)    private String sum;    @ExcelProperty(value = "来源",index =2)    private String name;//开支来源  如:**银行信用卡    @ExcelProperty(value = "日期",index =3)    private String date;    @ExcelProperty(value = "状态",index =4)    private Integer status;    @ExcelProperty(value = "备注",index =5)    private String descr;}

使用Java模型的方式需要继承 BaseRowModel ,字段上使用 @ExcelProperty 注解,注解中 value 属性指定字段名,index属性指定字段排序。

注意:这里和EasyExcel不同的是,目前可以使用只指定index和同时指定index和value的方式来匹配excel文件,但是如果只指定value,则无法读取。

@RequestMapping("/importExce")    @ResponseBody    public JsonResponse importExcel(@RequestParam("excelFile") MultipartFile excelFile, String type) throws IOException {        JsonResponse jsonResponse = new JsonResponse();        String sm="2019-02";        List dataList = null;        dataList = EasyExcelFactory.read(excelFile.getInputStream(), new Sheet(3, 1, TotalAmount.class));        int scuess = 0;        int error = 0;        for (Object o : dataList) {            if (o instanceof TotalAmount) {                TotalAmount importEntity = (TotalAmount) o;                try {                } catch (Exception e) {                    error++;                    e.printStackTrace();                    continue;                }            }        }    }/*    @RequestMapping("/importExce")    @ResponseBody    public JsonResponse importExce(){        JsonResponse jsonResponse = new JsonResponse();        File excelFile = new File                ("E:\\工作文档\\部门架构201902(bug).xlsx");        String sm="2019-02";        InputStream inputStream = new FileInputStream(excelFile);        List dataList = null;        dataList = EasyExcelFactory.read(inputStream, new Sheet(3, 1, TotalAmount.class));        int scuess = 0;        int error = 0;        for (Object o : dataList) {            if (o instanceof TotalAmount) {                TotalAmount importEntity = (TotalAmount) o;                try {                } catch (Exception e) {                    error++;                    e.printStackTrace();                    continue;                }            }        }    }*/

注意:在使用EasyExcel时容易出的几个错误:

For input "" 类型错误,应该是double等类型的字段有非double类型的数据

java.lang.NumberFormatException: multiple points 多线程使用非线程安全类报错,实际是在日期格式里有并非指定日期格式的数据,比如空格,比如指定 yyyy/mm/dd 但数据是 yyyy-mm-dd

使用easyexcel写出excel:

使用Java模型方式,返回模型列表,带入方法即可

/**     * 导出Excel     *     * @param request     * @param response     * @param map     * @throws IOException     */    @RequestMapping("export.do")    public void export(HttpServletRequest request, String type, HttpServletResponse response,                       @RequestParam Map
map) throws IOException { ServletOutputStream out = null; try { out = response.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true); String filename; String fileName = null; try { filename = new Date().toLocaleString(); fileName = new String((filename).getBytes(), "UTF-8"); Sheet sheet2 = new Sheet(2, 3, ImportEntityEasyExcel.class, "sheet", null); List
list = service.getData(map); response.setCharacterEncoding("utf-8"); response.setContentType("application/vnd.ms-excel"); response.setHeader("content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", "utf-8")); out.flush(); } catch (Exception e) { e.printStackTrace(); } finally { writer.finish(); try { out.close(); } catch (IOException e) { e.printStackTrace(); } } }

总结:

easyexcel还有一些并不完善,但是大数据量操作效率高于easypoi

转载于:https://www.cnblogs.com/jiangwz/p/10564749.html

你可能感兴趣的文章
minio 并发数_MinIO 参数解析与限制
查看>>
flash back mysql_mysqlbinlog flashback 使用最佳实践
查看>>
mysql存储引擎模式_MySQL存储引擎
查看>>
java 重写system.out_重写System.out.println(String x)方法
查看>>
配置ORACLE 11g绿色版客户端和PLSQL远程连接环境
查看>>
ASP.NET中 DataList(数据列表)的使用前台绑定
查看>>
Linux学习之CentOS(八)--Linux系统的分区概念
查看>>
System.Func<>与System.Action<>
查看>>
asp.net开源CMS推荐
查看>>
csharp skype send message in winform
查看>>
MMORPG 游戏服务器端设计--转载
查看>>
HDFS dfsclient写文件过程 源码分析
查看>>
ubuntu下安装libxml2
查看>>
nginx_lua_waf安装测试
查看>>
WinForm窗体缩放动画
查看>>
JQuery入门(2)
查看>>
linux文件描述符
查看>>
传值引用和调用引用的区别
查看>>
hyper-v 无线网连接
查看>>
Python3.7.1学习(六)RabbitMQ在Windows环境下的安装
查看>>