你所不知道的名称管理器
本帖最后由 Winny 于 2022-12-7 16:02 编辑需求背景:
在Web端数据填报场景中,客户经常会对单元格做一些标记,在设置数据时,需要先根据这些标记来定位单元格,之后将查询而来的数据设置在目标单元格上。为了简化这一流程,SpreadJS和GCExcel都提供了数据绑定的概念,如果对数据绑定不清楚,可以参考官方的学习地址:
1.SpreadJS数据绑定-学习指南;
2. SpreadJS基础入门视频;
3. SpreadJS设计器操作视频;
4. GCExcel数据绑定。
但数据绑定需要客户按照数据绑定的相关设置对文件重新设计 ,有一定的使用成本。本教程提供两种其它方式来对特定单元格设置数值。
(1)标签
SpreadJS中,标签可以用于给单元格设置一些额外标记,可支持字符串、JSON等多种类型。标签可以设置在表单、区域、和单元格三种级别上,这里以单元格标签为例。右键单元格,在弹出的右键菜单中选择标签,即可为单元格设置标记。
标签添加完成之后,后续设置数据 ,需要先对sheet遍历,找到单元格标签为“test”的单元格,之后设置单元格值即可。
function linkCell(sheet){
let rowCount = sheet.getRowCount()
let colCount = sheet.getColumnCount()
for(let i=0;i<rowCount;i++){
for(let j=0;j<colCount;j++){
if(sheet.getTag(i,j)==='test'){
return i+"-"+j
}
}
}
}
let cellInfo = linkCell(sheet).split("-")
sheet.setValue(cellInfo,cellInfo,'aaa')但是,这种方式当文件导出Excel之后再导入SpreadJS中会失效,因为Excel中不具备标签的功能,导出后Tag会丢失。如果希望能在导入导出之后仍具备该功能,需要考虑用其它SpreadJS与Excel兼容的元素。
(2)名称管理器
Excel中使用名称管理器,可以用来处理工作簿中所有定义的名称和表名称,可参考使用Excel中的名称管理器。在SpreadJS中添加名称管理器,方式如下:
添加完成之后,可以使用如下方式 ,根据名称管理器的名字定位单元格位置,之后设置内容:
let cus = sheet.getCustomName("aaa")
let range = cus.getExpression().getRange()
sheet.setValue(range.row,range.col,'test')
注意: 命名空间有作用域,可以作用在表单或者文件上,使用时需要分清楚作用级别。getCustomeNames()可以获取当前作用级别下的所有名称管理器,根据该数组也可扩展出定位单元格位置的方法。
页:
[1]