希望模板功能能在原excel上进行追加数据
现在业务提供了一个复杂的excel,里面有公式/格式/批注和下拉,现在只需要我们往里面写入数据; 如果用模板到处功能,就会出现丢失批注的情况,想问下后续会支持直接追加数据的功能吗? 或者现在代码,有能实现的思路吗?不胜感激!
目前还不能读取批注所以模板导出就丢失了批注功能,这个功能已经在开发了不过年前没有太多时间,应该会在年后上线。
自己实现的话有些困难,如果所有模板都已知的话可以迂回处理,暂时可以预先添加已知模板中的批注像下面的示例代码
TemplateSheet sheet = new TemplateSheet(Paths.get("库存导出模板.xlsx"));
// 手动添加批注
attachComments(sheet);
new Workbook().addSheet(sheet).writeTo(Paths.get("库存导出.xlsx"));
// 手动添加批注
public static void attachComments(TemplateSheet sheet) {
String templateName = null;
try {
Field templatePathField = sheet.getClass().getDeclaredField("templatePath");
templatePathField.setAccessible(true);
Object o = templatePathField.get(sheet);
if (o instanceof Path) {
templateName = ((Path) o).getFileName().toString();
}
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}
if (templateName == null) return;
// 获取Comments
Comments comments = sheet.createComments();
switch (templateName) {
case "商品导出模板.xlsx":
// A1单元格添加批注
comments.addComment(1, 1, "实际库存");
// B4单元格添加批注
comments.addComment(4, 2, new Comment("库存不足", "低于警戒线13%,请尽快添加库存").setValueFont(new Font("微软雅黑", 10, Color.RED)));
break;
case "库存导出模板.xlsx":
// A1单元格添加批注
comments.addComment(1, 1, "库区:A ~ E");
// B1单元格添加批注
comments.addComment(1, 2, "库位: 00 ~ 99");
break;
}
}
EEC的模板工作表是读取模板Excel然后重新写到新Excel,并不是在原Excel上添加数据,这样的好处是方便修改并可以对多个文件进行合并,坏处就是如果模板包含ExcelReader不支持的数据类型时则会丢失
那就尴尬了。用户提供的模板里面有很多函数和批注,也想过预先硬编码添加已知模板中的批注,但是这样一来用户更新模板就得把批注也一起更新,有些麻烦。
我学习下TemplateSheet的创建方法,看下是不是可以基于它再处理下
因为我只需要复制表头的批注和样式,其他的都不太需要
可以的,前提是需要读取批注,我空了推一个读取批注的示例代码,你可以在读取批注后添加到新工作表中,如果不考虑中间行插入或减少则可以直接添加否则需要计算位置
Message ID: @.***>
oh,看了下源码,发现正如你所说的,没有读取批注代码。没有这个前提,也不知道怎么获取批注了,得等年后你的新版本出来后再看看了
年底了每天都忙着写总结做汇报,着急用的话可以使用poi读取批注,然后添加到工作表也行
Message ID: @.***>
fix#418 分支支持读取批注,模版工作表也支持批注,可以使用这个分支本地测试是否解决问题
v0.5.22模板工作表已支持复制批注
感谢感谢,我研究下