找回密码
 立即注册

QQ登录

只需一步,快速开始

品茗-3

金牌服务用户

37

主题

95

帖子

344

积分

金牌服务用户

积分
344
品茗-3
金牌服务用户   /  发表于:2019-1-18 14:15  /   查看:6278  /  回复:14
本帖最后由 品茗-3 于 2019-1-18 14:53 编辑

12新版设计器单元格多选,sheet.SelectionPolicy // 设置支持Ctrl键选择多个不连续的单元格
的属性不管怎么设置,都可以CTRL+ 点击 多选,请问还需要有其他属性一起约束吗?
11.gif

还有就是我这边新建的spread,初始设置sheet.SelectionPolicy 成MultiRange后,保存的文件
fpSpread.Save(stream, SaveXMLOptions.All)  // stream为:FileStream fs = new FileStream(FileName, FileMode.CreateNew, FileAccess.ReadWrite)
,再次spread.open打开后,查看sheet的SelectionPolicy属性,又变回Range了,请问sheet.SelectionPolicy是否有继承在文件的sheet属性里?
  // 设置支持Ctrl键选择多个不连续的单元格
            if (sheet.SelectionPolicy != SelectionPolicy.MultiRange)
                sheet.SelectionPolicy = SelectionPolicy.MultiRange;

14 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-1-21 10:39:31
沙发
您好,设计器里设置这个选项直接预览确实没有生效,不过关闭设计器应用到代码里是好的。具体问题会反馈开发。
第二点MultiRange,没有序列化的xml我没重现,SelectionPolicy默认就是MultiRange。我这边修改SelectionPolicy保存xml还原没有问题。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-1-21 11:04:18
板凳
SelectionPolicy 在设计器里设置后不生效是专门这么做的, 这些类似属性设置后应用到spread对象是没问题。
设计器这么做的目的是让用设计器的人不受这些属性的控制方便快速设置内容。设计器的初衷是给设计人员用的,他能改这些设置,所以就不需要受这些设置的约束。
回复 使用道具 举报
品茗-3
金牌服务用户   /  发表于:2019-3-8 16:56:52
地板
本帖最后由 品茗-3 于 2019-3-8 16:59 编辑
dexteryao 发表于 2019-1-21 11:04
SelectionPolicy 在设计器里设置后不生效是专门这么做的, 这些类似属性设置后应用到spread对象是没问题。
...

如图调试:(上个11版本中我没遇到这个问题,升级到12.45.20181.0版本后出现的)
1.如图导入excel(自己新建表格也行),通过xml形式保存,使用tmp.Save(spreadfile, SaveXMLOptions.All);  // tmp为spread对象
从调试中看出, 此时页的多选属性(sheet.SelectionPolicy)为正常的SelectionPolicy.MultiRange(MultiRange支持Ctrl键多选cell)


2.如图导入成功后,打开表格,使用Open接口打开,用BindEvents(FpSpread spread)方法初始对象,
从调试中看出, 此时页的多选属性(sheet.SelectionPolicy)变成了的SelectionPolicy.Range(不支持Cell以Ctrl多选),
需要我通过再次遍历每个sheet设置
            if (sheet.SelectionPolicy != SelectionPolicy.MultiRange)
                sheet.SelectionPolicy = SelectionPolicy.MultiRange;

问题:涉及接口:(1)_Spread.Save(string fileName, SaveXMLOptions saveOption);
                            (2)_Spread.Open(string fileName);
通过GIF图中的测试,发现_Spread的上述接口可能:
1、未保存sheet的SelectionPolicy属性
2、或open接口对SelectionPolicy重新初始成了Range
3、未知原因
导致需要每次对每个sheet重新初始SelectionPolicy属性。

111.gif





回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-3-11 17:16:20
5#
image.png314752501.png

我用设计器建了一个模板,设置SelectionPolicy MultiRange
代码open这个xml,再save再open,属性还是MultiRange
回复 使用道具 举报
品茗-3
金牌服务用户   /  发表于:2019-3-13 08:41:30
6#
dexteryao 发表于 2019-3-11 17:16
我用设计器建了一个模板,设置SelectionPolicy MultiRange
代码open这个xml,再save再open,属性还是M ...

。。。,那我再看看
回复 使用道具 举报
品茗-3
金牌服务用户   /  发表于:2019-3-13 11:20:14
7#
dexteryao 发表于 2019-3-11 17:16
我用设计器建了一个模板,设置SelectionPolicy MultiRange
代码open这个xml,再save再open,属性还是M ...

还是有问题,如果新建表格是通过new spread出来的就会出问题
SelectionPolicy对象是存在sheet里(Xml文件中),不应该是spread,你那没问题是你用了同一个spread
demo附件已上传 SpreadDemo.rar (12.37 MB, 下载次数: 40)
回复 使用道具 举报
品茗-3
金牌服务用户   /  发表于:2019-3-14 17:48:54
8#
dexteryao 发表于 2019-3-11 17:16
我用设计器建了一个模板,设置SelectionPolicy MultiRange
代码open这个xml,再save再open,属性还是M ...

??  咋没回复了
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-3-15 16:50:44
9#
您好,原因找到了,确实因为您新建了一个spread对象,新建对象时候没有传递LegacyBehaviors,而form的对象有这个参数。
            FpSpread fpSpread = new FpSpread(LegacyBehaviors.None);
两边行为不一致导致属性丢失了,统一一下。
https://www.grapecity.com.cn/blo ... features-like-excel
回复 使用道具 举报
品茗-3
金牌服务用户   /  发表于:2019-3-17 15:49:22
10#
dexteryao 发表于 2019-3-15 16:50
您好,原因找到了,确实因为您新建了一个spread对象,新建对象时候没有传递LegacyBehaviors,而form的对象 ...

好的,谢谢
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部