alibaba / easyexcel

快速、简洁、解决大文件内存溢出的java处理Excel工具
https://easyexcel.opensource.alibaba.com
Apache License 2.0
31.65k stars 7.46k forks source link

3.1.1 按照模板导出com.alibaba.excel.exception.ExcelGenerateException: java.lang.ExceptionInInitializerError #2765

Open gzxn opened 1 year ago

gzxn commented 1 year ago

建议先去看文档 快速开始常见问题 触发场景描述

我是在安卓中使用的,通过Debug查看后发现3.1.0和3.1.1版本的BeanMap都是使用org.springframework.cglib.beans.BeanMap里面的BeanMap,在3.1.0和3.1.1版本项目中没有使用这个com.alibaba.excel.support.cglib.beans.BeanMap,导致我无法应用在安卓中,希望可以更改一下这个依赖包

触发Bug的代码

   EasyExcel.write(fileName, History.class)
            .sheet("模板1")
            .doWrite(historyList);

实体类

 public class History {
    /**
     * 主键
     */
    @ExcelIgnore
    private Integer id;
    /**
     * 在/离线模式
     */
    @ExcelProperty(value = "在/离线模式")
    private Integer mode;
    /**
     * 扫码模式
     */
    @ExcelProperty(value = "扫码模式")
    private Integer code;

    public History() {

    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getMode() {
        return mode;
    }

    public void setMode(Integer mode) {
        this.mode = mode;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

异常提示

E/WM-WorkerWrapper: Work [ id=26e7ed59-50fb-4c06-9d7f-4a918fedaac5, tags={ com.gzxn.pda.service.worker.ExportExcelWorker } ] failed because it threw an exception/error
    java.util.concurrent.ExecutionException: com.alibaba.excel.exception.ExcelGenerateException: java.lang.ExceptionInInitializerError
        at androidx.work.impl.utils.futures.AbstractFuture.getDoneValue(AbstractFuture.java:516)
        at androidx.work.impl.utils.futures.AbstractFuture.get(AbstractFuture.java:475)
        at androidx.work.impl.WorkerWrapper$2.run(WorkerWrapper.java:284)
        at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
     Caused by: com.alibaba.excel.exception.ExcelGenerateException: java.lang.ExceptionInInitializerError
        at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:65)
        at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:70)
        at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:47)
        at com.alibaba.excel.write.builder.ExcelWriterSheetBuilder.doWrite(ExcelWriterSheetBuilder.java:62)
        at com.gzxn.pda.service.worker.ExportExcelWorker.doWork(ExportExcelWorker.java:90)
        at androidx.work.Worker$1.run(Worker.java:85)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:919) 
     Caused by: java.lang.ExceptionInInitializerError
        at com.alibaba.excel.util.BeanMapUtils.create(BeanMapUtils.java:25)
        at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.addJavaObjectToExcel(ExcelWriteAddExecutor.java:144)
        at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.addOneRowOfDataToExcel(ExcelWriteAddExecutor.java:82)
        at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.add(ExcelWriteAddExecutor.java:58)
        at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:59)
        at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:70) 
        at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:47) 
        at com.alibaba.excel.write.builder.ExcelWriterSheetBuilder.doWrite(ExcelWriterSheetBuilder.java:62) 
        at com.gzxn.pda.service.worker.ExportExcelWorker.doWork(ExportExcelWorker.java:90) 
        at androidx.work.Worker$1.run(Worker.java:85) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:919) 
     Caused by: com.alibaba.excel.support.cglib.core.CodeGenerationException: java.lang.UnsupportedOperationException-->can't load this type of class file
        at com.alibaba.excel.support.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:558)
        at com.alibaba.excel.support.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:363)
        at com.alibaba.excel.support.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:110)
        at com.alibaba.excel.support.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:108)
        at com.alibaba.excel.support.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at com.alibaba.excel.support.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)
        at com.alibaba.excel.support.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)
        at com.alibaba.excel.support.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:134)
        at com.alibaba.excel.support.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:319)
        at com.alibaba.excel.support.cglib.core.KeyFactory$Generator.create(KeyFactory.java:237)
        at com.alibaba.excel.support.cglib.core.KeyFactory.create(KeyFactory.java:184)
        at com.alibaba.excel.support.cglib.core.KeyFactory.create(KeyFactory.java:164)
        at com.alibaba.excel.support.cglib.core.KeyFactory.create(KeyFactory.java:156)
        at com.alibaba.excel.support.cglib.beans.BeanMap$Generator.<clinit>(BeanMap.java:66)
        at com.alibaba.excel.util.BeanMapUtils.create(BeanMapUtils.java:25) 
        at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.addJavaObjectToExcel(ExcelWriteAddExecutor.java:144) 
        at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.addOneRowOfDataToExcel(ExcelWriteAddExecutor.java:82) 
        at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.add(ExcelWriteAddExecutor.java:58) 
        at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:59) 
        at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:70) 
        at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:47) 
        at com.alibaba.excel.write.builder.ExcelWriterSheetBuilder.doWrite(ExcelWriterSheetBuilder.java:62) 
        at com.gzxn.pda.service.worker.ExportExcelWorker.doWork(ExportExcelWorker.java:90) 
        at androidx.work.Worker$1.run(Worker.java:85) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:919) 
     Caused by: java.lang.UnsupportedOperationException: can't load this type of class file
        at java.lang.ClassLoader.defineClass(ClassLoader.java:591)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.alibaba.excel.support.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:555)
        at com.alibaba.excel.support.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:363) 
        at com.alibaba.excel.support.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:110) 
        at com.alibaba.excel.support.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:108) 
        at com.alibaba.excel.support.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
        at com.alibaba.excel.support.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) 
        at com.alibaba.excel.support.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) 
        at com.alibaba.excel.support.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:134) 
        at com.alibaba.excel.support.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:319) 
        at com.alibaba.excel.support.cglib.core.KeyFactory$Generator.create(KeyFactory.java:237) 
        at com.alibaba.excel.support.cglib.core.KeyFactory.create(KeyFactory.java:184) 
        at com.alibaba.excel.support.cglib.core.KeyFactory.create(KeyFactory.java:164) 
        at com.alibaba.excel.support.cglib.core.KeyFactory.create(KeyFactory.java:156) 
        at com.alibaba.excel.support.cglib.beans.BeanMap$Generator.<clinit>(BeanMap.java:66) 
        at com.alibaba.excel.util.BeanMapUtils.create(BeanMapUtils.java:25) 
        at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.addJavaObjectToExcel(ExcelWriteAddExecutor.java:144) 
        at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.addOneRowOfDataToExcel(ExcelWriteAddExecutor.java:82) 
        at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.add(ExcelWriteAddExecutor.java:58) 
        at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:59) 
        at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:70) 
        at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:47) 
        at com.alibaba.excel.write.builder.ExcelWriterSheetBuilder.doWrite(ExcelWriterSheetBuilder.java:62) 
        at com.gzxn.pda.service.worker.ExportExcelWorker.doWork(ExportExcelWorker.java:90) 
        at androidx.work.Worker$1.run(Worker.java:85) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:919) 
I/WM-WorkerWrapper: Worker result FAILURE for Work [ id=26e7ed59-50fb-4c06-9d7f-4a918fedaac5, tags={ com.gzxn.pda.service.worker.ExportExcelWorker } ]

image

image

提示的异常或者没有达到的效果

kaTelance commented 1 year ago

填充的时候也有这个bug,获取相对路径文件的名称、路径、流都会报错

zhudasen commented 1 year ago

请问有解决办法了吗?

gzxn commented 1 year ago

还没有解决,不过我暂时用了这个例子来实现安卓中导出我的Excel:https://github.com/DmrfCoder/AndroidExcelDemo

xuexixuexijpg commented 1 year ago

我手动写代码报了个awt相关的 Failed resolution of: Ljava/awt/font/FontRenderContext;,这个awt在andoid上又不支持,请问有大佬懂吗?

xuexixuexijpg commented 1 year ago

我手动写代码报了个awt相关的 Failed resolution of: Ljava/awt/font/FontRenderContext;,这个awt在andoid上又不支持,请问有大佬懂吗?

引入部分awt图形库代码之后报了这个,还要awt.so包,,无解了 image

xuexixuexijpg commented 1 year ago

我手动写代码报了个awt相关的 Failed resolution of: Ljava/awt/font/FontRenderContext;,这个awt在andoid上又不支持,请问有大佬懂吗?

引入部分awt图形库代码之后报了这个,还要awt.so包,,无解了 image

这里有个poi的安卓库可以试试(poi-android),至少比使用jxl的内存问题好点,如果easyexcel能屏蔽掉poi部分api不能在androidSdk的感觉也挺好用的,毕竟有中文文档==,

zhuangjiaju commented 1 year ago

@gzxn @xuexixuexijpg @kaTelance 你们都是搞安卓的么? 是的化麻烦加下钉钉下,联系下群主 可以一起把安卓支持了

byteRd commented 4 months ago

请问这个问题在Android上解决了吗?钉钉群也满了加不进去了

byteRd commented 4 months ago

@gzxn @xuexixuexijpg @kaTelance 你们都是搞安卓的么? 是的化麻烦加下钉钉下,联系下群主 可以一起把安卓支持了

请问这个解决了吗

panyingdaoz commented 3 months ago

我也是要在Android应用,但是一直有问题,有谁解决了的能提供下方案吗?

panyingdaoz commented 3 months ago

我也是要在Android应用,但是一直有问题,有谁解决了的能提供下方案吗?

byteRd commented 3 months ago

这个现在有解决吗

------------------ 原始邮件 ------------------ 发件人: "alibaba/easyexcel" @.>; 发送时间: 2024年4月22日(星期一) 下午3:21 @.>; @.**@.>; 主题: Re: [alibaba/easyexcel] 3.1.1 按照模板导出com.alibaba.excel.exception.ExcelGenerateException: java.lang.ExceptionInInitializerError (Issue #2765)

我也是要在Android应用,但是一直有问题,有谁解决了的能提供下方案吗?

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>