[alibaba/easyexcel]动态修改表头不生效

2023-12-08 195 views
9

通过代理方式修改表头,偶尔会失效问题 field = srcClass.getDeclaredField(key); ExcelProperty excel = field.getAnnotation(ExcelProperty.class); InvocationHandler excelH = Proxy.getInvocationHandler(excel); Field excelF = excelH.getClass().getDeclaredField("memberValues"); excelF.setAccessible(true); Map excelValues = (Map) excelF.get(excelH); excelValues.put("value", new String[]{columnMap.get(key)});

回答

2

通过修改实体类中ExcelProperty中的value值来达到动态表头的效果;目前修改了偶尔会不成功的问题

3

这种方式是可以的,但是想知道是否支持上面动态代理的方式修改excelProperty的value值,目前只是偶尔会出现问题

4

你要是想用黑科技破坏封装,只要你写的是JAVA都能生效。 为什么不生效的答案就是你用错了

0

是使用的java注解代理,修改注解内容;如果使用错了,请大佬指教下

0

给上一段能跑的代码,说出你的期望的结果

9

期望:可以动态修改excelProperty中的value值 目前代码是正常运行的,但是偶尔会出现导出的标题是原来的excelProperty中的value值; demo: excel-demo.zip 顺便大佬也帮忙看下使用numberFormat出现的问题 企业微信截图_16789323132087

3

我跑你的代码是正常的,注解内容也修改了. 怎么复现你的问题

6

注解修改问题是偶发的,目前不知道怎么复现; numberFormat的问题是什么原因呢?

8

numberformat升级一下版本试试

4

升级依赖版本为3.2.1也不行

7

是修改了类 注解上的信息 ,, 的确有点黑科技 , 其实不推荐使用, 因为一些 需要反射的框架都会有 缓存 , 并且最重要的是 ,一定会有 线程安全的问题.

8

我用aop把@ExcelProperty里面的列名改了,比如@ExcelProperty("${name"}),然后去国际化文件里找name,本地没问题,部署在服务器上过一段时间之后就会失效,本来应该导出为 姓名/name ,但是导出的文件,表头就是 ${name}, 而不是替换后的

0

不是很懂多线程,没有实践过,看到上面有人说会有线程安全问题

6

解决了吗 遇到相同的问题了

9

已经解决了现在将原因和方法告诉你 注解修改不可以传入xxx.class 应该传入vo.getClass() 这样相当于在vo对象上修改 而传入xxx.class则可能使用的是编译后的.class文件

3

这样吗 最后写的时候有没有写我们的对象的名字 aClass=po.getClass()

ExcelSheetExportModel detail = new ExcelSheetExportModel(); detail.setClzz(aClass);

3

目前按照po.getClass()的方法测了没有问题 ,后面我再观察一下。 请楼主告知下另一种写法,我也参考下哈。