今天遇到一个问题,使用layui前端框架,table.export导出的excel再导入,后台easyExcel识别不是excel文件。

前端:layui

后端:jfinal

业务是这样,要导入学生成绩,首先下载一个模板,模板中包含学生名单,用户只需要下载模板填入成绩后,重新导入回去。

一开始我是这么做:先查询出学生名单,再使用[table.export](https://table.export)方式把学生名单导出为Excel文件(.xls),导入是直接上传文件到后端,easyExcel解读文件然后batchsave到mysql数据库。导出文件正常,但是传到后台发生了这样的错误:

ERROR | cn.baoye.Controller.Usual_Controller.upload_usualscore() : /Usual_performance/upload_usualscore?course_sn=33&term_sn=1
com.alibaba.excel.exception.ExcelCommonException: Convert excel format exception.You can try specifying the 'excelType' yourselfat com.alibaba.excel.support.ExcelTypeEnum.valueOf(ExcelTypeEnum.java:71)[easyexcel-2.1.6.jar:]at com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder.<init>(ReadWorkbookHolder.java:160)[easyexcel-2.1.6.jar:]at com.alibaba.excel.context.AnalysisContextImpl.<init>(AnalysisContextImpl.java:45)[easyexcel-2.1.6.jar:]at com.alibaba.excel.analysis.ExcelAnalyserImpl.<init>(ExcelAnalyserImpl.java:44)[easyexcel-2.1.6.jar:]at com.alibaba.excel.ExcelReader.<init>(ExcelReader.java:143)[easyexcel-2.1.6.jar:]at com.alibaba.excel.read.builder.ExcelReaderBuilder.build(ExcelReaderBuilder.java:270)[easyexcel-2.1.6.jar:]at com.alibaba.excel.read.builder.ExcelReaderBuilder.sheet(ExcelReaderBuilder.java:293)[easyexcel-2.1.6.jar:]at com.alibaba.excel.read.builder.ExcelReaderBuilder.sheet(ExcelReaderBuilder.java:281)[easyexcel-2.1.6.jar:]at cn.baoye.Controller.Usual_Controller.upload_usualscore(Usual_Controller.java:195)[file:/D:/baoyeProject/13智慧教育管理平台/edudata/target/classes/:]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_333]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_333]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_333]at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_333]at com.jfinal.aop.Invocation.invoke(Invocation.java:97)[jfinal-4.9.21.jar:]at cn.baoye.Interceptor.LoginInterceptor.intercept(LoginInterceptor.java:31)[file:/D:/baoyeProject/13智慧教育管理平台/edudata/target/classes/:]at com.jfinal.aop.Invocation.invoke(Invocation.java:91)[jfinal-4.9.21.jar:]at com.jfinal.core.ActionHandler.handle(ActionHandler.java:88)[jfinal-4.9.21.jar:]at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:90)[jfinal-4.9.21.jar:]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)[catalina.jar:9.0.50]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)[catalina.jar:9.0.50]at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)[catalina.jar:9.0.50]at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)[catalina.jar:9.0.50]at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)[catalina.jar:9.0.50]at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)[catalina.jar:9.0.50]at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)[catalina.jar:9.0.50]at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)[catalina.jar:9.0.50]at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)[catalina.jar:9.0.50]at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)[catalina.jar:9.0.50]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)[tomcat-coyote.jar:9.0.50]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)[tomcat-coyote.jar:9.0.50]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)[tomcat-coyote.jar:9.0.50]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)[tomcat-coyote.jar:9.0.50]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)[tomcat-coyote.jar:9.0.50]at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)[:1.8.0_333]at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)[:1.8.0_333]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)[tomcat-util.jar:9.0.50]at java.lang.Thread.run(Thread.java:750)[:1.8.0_333]

转换excel格式异常。您可以尝试自己指定“excelType” 那就是传的不是excel文件?

查了很多资料也没有找到原因,要么自己太菜,要么使用的框架太小众,我就自己想办法解决。

然后打开layui导出的excel文件:

尝试另存,发现默认保存类型不是excel的后缀:

另存为.xls/.xlsx文件后导入就正常了,但是我们不能让客户每一次都要另存吧?

所以我换了一个思路:

建立一个excel模板文件,只包含表头,下载模板的时候在后端填入学生名单后,生成excel文件,再返回文件名,前端直接使用[window.location.href]进行下载。

后端:

//excel模板路径File fi = new File(getSession().getServletContext().getRealPath("download") + "/平时成绩导入模板.xlsx");//读取excel模板XSSFWorkbook wb = new XSSFWorkbook(fi);//读取模板内Sheet1内容XSSFSheet sheet = wb.getSheet("Sheet1");//在相应的单元格进行赋值XSSFRow row;for (int i=0;i< recordList.size();i++) {row = sheet.createRow(i+1);// 第四步,创建单元格,并设置值row.createCell((short)0).setCellValue(recordList.get(i).getStr("realname"));row.createCell((short)1).setCellValue(recordList.get(i).getStr("order"));row.createCell((short)2).setCellValue(recordList.get(i).getStr("upachi1"));row.createCell((short)3).setCellValue(recordList.get(i).getStr("upachi2"));row.createCell((short)4).setCellValue(recordList.get(i).getStr("upachi3"));row.createCell((short)5).setCellValue(recordList.get(i).getStr("upachi4"));row.createCell((short)6).setCellValue(recordList.get(i).getStr("upachi5"));row.createCell((short)7).setCellValue(recordList.get(i).getStr("upachi6"));row.createCell((short)8).setCellValue(recordList.get(i).getStr("upachipe"));}try ( //修改模板内容导出新模板FileOutputStream out = new FileOutputStream(filePath)) {File file = new File(filePath);if(file.exists()){//为了保持数据是最新的,先删除同名文件,file.delete();}//导出excelwb.write(out);renderJson(Ret.ok().set("code", 0).set("filename",file.getName()));} catch (Exception e) {e.getMessage();}

前端:

                $.ajax({url: './downloadexcel',data: {"term_sn":term_sn,"filename":val,"course_sn":course_sn,"class_sn":class_sn},datatype:"json",success: function (result) {//浏览器A下载window.location.href='../download/'+result.filename;}})

运行测试,OK!

技术小白,只是记录一下遇到问题和自己的解决思路。

easyexcel解析xls文件:Convert excel format exception.You can try specifying the ‘excelType‘ yourself相关推荐

  1. 【EasyExcel】公司文件加密软件导致 Convert excel format exception.You can try specifying the ‘excelType‘ yourself

    做POI操作,用阿里的依赖处理Excel 报错 Convert excel format exception.You can try specifying the 'excelType' yourse ...

  2. java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】

    本文实例讲述了java简单解析xls文件的方法.分享给大家供大家参考,具体如下: 读取: import java.io.*; import jxl.*; import jxl.write.*; imp ...

  3. python模块介绍- xlwt 创建xls文件(excel)

    python模块介绍- xlwt 创建xls文件(excel) 2013-06-24磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 ...

  4. Excel中使用宏工具,告别重复工作,批量处理xls文件 - WPS Excel

    核心步骤 在excel中启用宏 打开一个实例文档,创建宏,记录操作,保存宏为独立的bas文件 每编辑一个excel文档,都先导入这个宏,运行这个宏,文档数据被自动处理,保存为不带宏的excel文档 o ...

  5. EXCEL解析:使用poi解析xlsx和xls后缀的excel文件

    1.pom依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency><g ...

  6. python 解析下载的二进制Excel文件内容

    先描述一波问题场景: 需求是项目中调接口会下载Excel文件,然后解析出Excel文件中固定行列的值即可.如果直接读取Excel文件,使用xlrd库即可.但是调下载接口返回的二进制的内容~~~,如下: ...

  7. linux libxls xls_open 中文,Linux/Mingw Excel (*.xls)文件读取,使用libxls库

    做个项目需要读取xls文件,通过搜索,找到三个库,BasicExcel.libxl.libxls. 因为BasicExcel不支持中文,而且06年就没更新了,果断放弃.libxl感觉是这三个库中最好的 ...

  8. python生成wps文件_使用Python操作XLS文件(wps中叫et)

    一旦TE需要* *信息的列表,我导出一个txt文件与python和扔给他们,但是他们很不开心,哈哈,因为他们想要将数以百计的数据放到xls文件列表输出,工作数量太大,所以我问我出口成xls文件然后给他 ...

  9. 使用Python操作XLS文件(wps中叫et)

    有一次TE需要一个**信息列表,我用python导出了一个txt文件丢给了他们,结果他们很不悦哇,呵呵,因为他们要把几百项数据人肉到xls文件中作为列表输出,工作量太大,便要求我导出成xls文件然后再 ...

  10. python操作xls文件_【转】使用Python操作XLS文件

    我在网上找了下,发现至少有两种方法,第一种是直接操作excle的com库,当然python自带的lib里面已经给我们封装好了实现,直接使用就可以 了,win32com.client,这种方法甚至可以直 ...

最新文章

  1. TCP的那些事(转载)
  2. python汽车仿真_汽车山羊问题的分析以及Python和MATLAB仿真实验
  3. java类与对象实验报告心得体会_Java类与对象实验报告.doc
  4. Jmeter接口测试实例图文示例
  5. python 学习之路开始了
  6. 键盘表和ASCII码表
  7. 【Android】Android 集成芯烨云打印机实现打印票据
  8. Jetpack DataStore 你总要了解一下吧?
  9. 计算机键盘fn,笔记本键盘fn键有什么用 笔记本键盘fn键使用说明大全
  10. JAVA proxy dns回源_常见问题 - CDN 回源配置相关问题
  11. 8个成语接龙首尾相连_成语接龙该怎么接?每组开头有一个成语,要接龙,每一个词的末尾都是下一个词的开头,从 来日方长 到 取之不尽,中间要填8个...
  12. 古琴入门-古琴十大名曲-古琴教学——唐畅古琴
  13. GEE实战4:利用GEE获取进行气温空间随机采样【随机采样】
  14. 解决Google 云端硬盘,文件下载问题
  15. 删除文件夹遇到的 错误ox80070091:目录不是空的错误解决
  16. 新手做SEO迷茫时应该做什么
  17. 通过Iconfont在线调用项目图标
  18. 软件压力测试图片60张,看图测压力,你抗压么?
  19. Bulldog2 渗透测试
  20. fiddler对浏览器、app抓包及证书安装

热门文章

  1. office2007每次打开都配置进度_每次打开excel2007都要配置进度怎么办?
  2. 干货收藏|如何用chrom插件实现U校园自动刷课
  3. 魅族手机Root之后如何恢复
  4. pnp型三极管 饱和 截至_截至2013年核心Java帖子
  5. Ubuntu离线安装curl
  6. QCC3024/QCC3034/QCC3020/QCC3021/QCC3031 USB AUDIO USB声卡 双向动态切换功能
  7. php文章详情页排版,WordPress自定义文章详情页模板
  8. 影响因子在10的计算机杂志什么水平,国人无人发表的TOP期刊,影响因子翻倍,5分变10分,不收版面费!...
  9. LED产品认证和检测
  10. eviews9.0详细安装步骤