找回密码
 立即注册

QQ登录

只需一步,快速开始

Jobcrazy

初级会员

29

主题

96

帖子

387

积分

初级会员

积分
387
Jobcrazy
初级会员   /  发表于:2017-11-16 10:50  /   查看:3814  /  回复:5
image.png579050597.png
如上图(取自文档spread表单),getSheet方法通过索引来获取sheet,但是在使用中,移动sheet和删除sheet都会导致sheet索引改变,这样通过特定的索引取到的sheet就不一样了,能否提供相应的api,可以通过特定不变的属性来获取特定的sheet,即使改变sheet顺序也能取到属性对应的原来的sheet,这样做主要是为了实现跨工作簿函数能根据sheet名称的改变而更新函数。

5 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-11-16 11:37:38
沙发
您好,您可以给每个sheet设置一个tag,Sheet.tag(value?),然后通过tag来进行定位获取特定的sheet,参考:
http://demo.gcpowertools.com.cn/ ... /#/samples/tagBasic
回复 使用道具 举报
Jobcrazy
初级会员   /  发表于:2017-11-16 16:21:44
板凳
ClarkPan 发表于 2017-11-16 11:37
您好,您可以给每个sheet设置一个tag,Sheet.tag(value?),然后通过tag来进行定位获取特定的sheet,参考:
...

tag不能满足我们的需求,因为tag是临时的,不能存储到json数据中。我们自己写了跨工作簿的函数(spread.js不支持跨工作簿函数,我们通过异步函数实现),页面中只会渲染一张表的数据,需要通过函数的参数信息去取数据库中对应数据的sheet里的单元格数据,我们目前用的是用sheet名去找数据,但是因为sheet名是可以改变的,而且改变sheet名后需要更新跨表函数里的引用位置信息,这样就需要有一个固定的能代表该sheet的标记,可以通过该标记获取到sheet对象,而且能存储在toJSON之后的json数据里。我们想做成这样的效果:渲染数据触发表间函数,获取函数内容,字符串解析获取参数,查询数据库,通过参数中的sheet名称与数据id去获取对应json数据的sheet,如果sheet名存在,则取值,并更新该表间函数参数中的sheet标记,如果sheet名不存在,则通过函数参数中的标记去获取sheet,如果标记存在,则取值并更新表间函数参数中的sheet名,如果标记不存在,则抛错#REF。计算结果都已实现,现在就是没有这个固定的sheet标记,相信excel也是这样的逻辑。能否提供对应的api,帮助我们完善跨工作簿的表间函数?
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-11-16 17:52:29
地板
您好,设置的tag是可以保存在json中的,如下图所示:
image.png392307738.png
回复 使用道具 举报
Jobcrazy
初级会员   /  发表于:2017-11-16 18:08:42
5#
image.png761322021.png
如何获取加号按钮的dom对象?
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-11-17 10:05:34
6#
您好:
大致思路是这样的,设置一个标记isNew默认为false
监听两个事件一个SheetTabClick,一个ActiveSheetChanged,
在SheetTabClick中判断sheetTabIndex == -1 时为新增sheet,进入判断后将isNew设置为true;
ActiveSheetChanged事件中判断isNew标记,如果为true,获取当前sheet并添加标记,之后将标记位设置为false;
参考代码如下:
  1.         var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
  2.         var isNew = false;
  3.         var sum = 0;
  4.         spread.bind(GC.Spread.Sheets.Events.SheetTabClick, function (e, info) {   
  5.                 if(info.sheetTabIndex === -1){
  6.                         isNew = true;
  7.                 }
  8.         });
  9.         spread.bind(GC.Spread.Sheets.Events.ActiveSheetChanged, function (sender, args) {
  10.                 if(isNew){
  11.                         var new_sheet = spread.getActiveSheet();
  12.                         new_sheet.tag("new sheet_"+sum);
  13.                         sum++;
  14.                         isNew = false;
  15.                 }
  16.         });               
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部