guanquan.wang
guanquan.wang
EEC从设计初就未考虑支持多线程的情况,如果要支持多线程Styles、SharedString、RowBlock甚至WorksheetWriter都需要重新设计,仅改这一个方法是不能满足多线程的,这个方法如果要改的话只需要将cache删掉即可,将里面`c = cache[n]`语句改为`c = new char[n]`即可,不需要缓存200个下标 无论是读还是写EEC都不支持多线程
能否将使用详细描述一下场景以及相关代码示例,我需要复现一下问题
> > 能否将使用详细描述一下场景以及相关代码示例,我需要复现一下问题 > > 我重新看了下cache单线程应该没问题,cache 本身的值没什么作用,只是地址占位,具体的值还是当时算的 是的,这里定义为cache容易产生歧义,定义为buffer更好理解,它的作用是将数字转为Excel的列号,这里并没有缓存的作用,因为每一行都需要计算完整的列号,比如10万行20列则需要计算10万x20次列号,所以这里为了减少实例化char[]才这么设计的。 缓存列号是可行的,不需要独立缓存只需要将列号缓存到Column中即可,你可以按下面这几个步骤重新修改并提交。 1. Column新增列号属性`realCol` 2. 删除Sheet#cache定义,直接在int2Col方法中new char[] 3. 修改`Sheet#calculateRealColIndex`方法和`WorksheetWriter#getColumn`方法,在设置realColIndex后计算列号并保存到Column 4. 修改WorksheetWriter#write方法中的`int2Col(hc.getRealColIndex())`,直接从Column获取列号 另外你可以实测一下是否能提升性能,个人估计影响不大
没有直接设置的方法需扩展,明天贴出示例,下个版本内置超链接 Message ID: ***@***.***>
自定义的话有点麻烦,如果不急用的话可以等待下一个版本,需要急用的话可以参照如下方式扩展 1. 新建一个扩展目录eec.ext(非必须) 2. 新建一个自定义注解Hyperlink(非必须) ``` @Target({ ElementType.FIELD, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) public @interface Hyperlink { } ``` 3. 新建ListSheet扩展类MyListSheet用来解析Hyperlink 注解 ``` public class MyListSheet extends ListSheet { // 看情况覆写父类的Constructor public...
测试代码 ``` @Test public void hyperlinkTest() throws IOException { List list = new ArrayList(); list.add(new Item("京东", "https://www.jd.com")); list.add(new Item("天猫", "https://www.tmall.com")); list.add(new Item("淘宝", "https://www.taobao.com")); new Workbook().addSheet(new MyListSheet(list).setSheetWriter(new MyXMLWorksheetWriter())).writeTo(Paths.get("./超连接测试.xlsx")); } ```
暂时不支持,只能在外部拼接好,模板工作表TemplateSheet开发好后可以使用模板。 暂时的话可以只能在对象中拼接,你可以定义一个对象,包含2个数组,在新对象中对值进行拼接 @ExcelColumn public String join() { return list1.get(0).getNmae() + list2.get(0).getNum(); }
v0.5.14支持超设置超链接且新增模板文件导出,拼接两个List 的字段应该可以使用模板来实现
没有敏感数据的话可以将文件发我,点击我头像查看邮箱地址 Message ID: ***@***.***>
已收