找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

141

主题

261

帖子

1682

积分

超级版主

Rank: 8Rank: 8

积分
1682
Winny
超级版主   /  发表于:2022-12-7 15:40  /   查看:1797  /  回复:0
本帖最后由 Winny 于 2022-12-7 16:02 编辑

需求背景:

在Web端数据填报场景中,客户经常会对单元格做一些标记,在设置数据时,需要先根据这些标记来定位单元格,之后将查询而来的数据设置在目标单元格上。为了简化这一流程,SpreadJS和GCExcel都提供了数据绑定的概念,如果对数据绑定不清楚,可以参考官方的学习地址:
1.SpreadJS数据绑定-学习指南
2. SpreadJS基础入门视频
3. SpreadJS设计器操作视频
4. GCExcel数据绑定
但数据绑定需要客户按照数据绑定的相关设置对文件重新设计 ,有一定的使用成本。本教程提供两种其它方式来对特定单元格设置数值。
(1)标签
SpreadJS中,标签可以用于给单元格设置一些额外标记,可支持字符串、JSON等多种类型。标签可以设置在表单、区域、和单元格三种级别上,这里以单元格标签为例。右键单元格,在弹出的右键菜单中选择标签,即可为单元格设置标记。
1.gif392035827.png
标签添加完成之后,后续设置数据 ,需要先对sheet遍历,找到单元格标签为“test”的单元格,之后设置单元格值即可。
  1. function linkCell(sheet){
  2.     let rowCount = sheet.getRowCount()
  3.     let colCount = sheet.getColumnCount()
  4.     for(let i=0;i<rowCount;i++){
  5.         for(let j=0;j<colCount;j++){
  6.             if(sheet.getTag(i,j)==='test'){
  7.                 return i+"-"+j
  8.             }
  9.         }
  10.     }
  11. }
  12. let cellInfo = linkCell(sheet).split("-")
  13. sheet.setValue(cellInfo[0],cellInfo[1],'aaa')
复制代码
但是,这种方式当文件导出Excel之后再导入SpreadJS中会失效,因为Excel中不具备标签的功能,导出后Tag会丢失。如果希望能在导入导出之后仍具备该功能,需要考虑用其它SpreadJS与Excel兼容的元素。

(2)名称管理器
Excel中使用名称管理器,可以用来处理工作簿中所有定义的名称和表名称,可参考使用Excel中的名称管理器。在SpreadJS中添加名称管理器,方式如下:
1.gif308800658.png
添加完成之后,可以使用如下方式 ,根据名称管理器的名字定位单元格位置,之后设置内容:
  1. let cus = sheet.getCustomName("aaa")
  2. let range = cus.getExpression().getRange()
  3. sheet.setValue(range.row,range.col,'test')
复制代码

注意: 命名空间有作用域,可以作用在表单或者文件上,使用时需要分清楚作用级别。getCustomeNames()可以获取当前作用级别下的所有名称管理器,根据该数组也可扩展出定位单元格位置的方法。

0 个回复

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