Winny 发表于 2022-12-8 10:39:12

动态名称管理器拼接

本帖最后由 Winny 于 2022-12-8 10:39 编辑

在你所不知道的名称管理器中,介绍了名称管理器的含义及它用于标记单元格设置数据的使用方法。但是在用代码添加名称管理器时,客户会觉得自己编写名称管理器的引用区域略显复杂,希望可以根据区域来动态生成名称管理器的引用范围。本文会从前后端表格控件SpreadJS和GCExcel两方面去讲解如何动态生成名称管理器的引用区域。

(1)SpreadJS生成名称管理器引用区域

根据上图,当添加一个名称管理器时,引用区域为Sheet2!$C$5:$D$6,由工作表名称和区域引用组成。如果使用API去添加,容易出错,此时,我们可以借助其它API来拼接出引用字符串,详细代码如下:
let rangeStr = GC.Spread.Sheets.CalcEngine.rangeToFormula(sheet.getRange(0,0,4,4))
let cusref = `='${sheet.name()}'!${rangeStr}`
sheet.addCustomName('test',cusref,0,0)


关于名称管理器的API解释,可参考学习指南-名称管理器,添加完上述代码之后,打开名称管理器,可以看到添加的信息:

需要注意的时,这列拼接工作表名称时,工作表名称需要加单引号,防止当工作表名称出现一些运算符时,后续定位单元格有问题。
(2) GCExcel拼接名称管理器
Workbook wb = new Workbook();
      IWorksheet ws = wb.getActiveSheet();
      ws.setName("CIT.WP01.3_预提费用-FS");
      Reference refer = new Reference();
      refer.setWorksheetName(ws.getName());
      refer.setRow(0);
      refer.setColumn(0);
      refer.setIsColumnRelative(false);
      refer.setIsRowRelative(false);
      ws.getNames().add("test", refer.toString());
      wb.save("test.xlsx");
关于名称管理器的API介绍可以参考GCExcel学习指南,添加完成后,导出Excel,名称管理器展示如下:


页: [1]
查看完整版本: 动态名称管理器拼接