找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

142

主题

265

帖子

1715

积分

超级版主

Rank: 8Rank: 8

积分
1715
Winny
超级版主   /  发表于:2022-12-8 10:39  /   查看:1937  /  回复:0
本帖最后由 Winny 于 2022-12-8 10:39 编辑

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

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

复制代码

关于名称管理器的API解释,可参考学习指南-名称管理器,添加完上述代码之后,打开名称管理器,可以看到添加的信息:
image.png159188841.png
需要注意的时,这列拼接工作表名称时,工作表名称需要加单引号,防止当工作表名称出现一些运算符时,后续定位单元格有问题。
(2) GCExcel拼接名称管理器
  1. Workbook wb = new Workbook();
  2.         IWorksheet ws = wb.getActiveSheet();
  3.         ws.setName("CIT.WP01.3_预提费用-FS");
  4.         Reference refer = new Reference();
  5.         refer.setWorksheetName(ws.getName());
  6.         refer.setRow(0);
  7.         refer.setColumn(0);
  8.         refer.setIsColumnRelative(false);
  9.         refer.setIsRowRelative(false);
  10.         ws.getNames().add("test", refer.toString());
  11.         wb.save("test.xlsx");
复制代码

关于名称管理器的API介绍可以参考GCExcel学习指南,添加完成后,导出Excel,名称管理器展示如下:
1670467138039.png862201232.png

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部