找回密码
 立即注册

QQ登录

只需一步,快速开始

coolmayi

注册会员

10

主题

21

帖子

101

积分

注册会员

积分
101
coolmayi
注册会员   /  发表于:2017-3-18 11:51  /   查看:8044  /  回复:9
本帖最后由 coolmayi 于 2017-3-18 14:22 编辑

如题。
可能一整列中,某些单元格是被保护,不让录入的。
但是想从excel中直接复制一整列的数据,粘贴过来。

现在只能选中能录入的区域进行分批粘贴,太影响效率,这个有啥可以解决的方法吗?

V9

还有个
GcSpread.Sheets.Events.TopRowChanged 触发事件的问题。

TopRowChanged 触发后,实际控件里的TopRow还没有被改变,或者被禁止刷新了。

在这个事件响应中,我是获取不到新的单元格坐标信息(因为还没刷新)。

这个要怎么处理? 我在TopRowChanged里执行activeSheet.isPaintSuspended(false),或强制刷新是可以获取新信息的,但是都不完美。还有啥方法没?
activeSheet.isPaintSuspended(false) 没有找到一个地方重新设置刷新(实际TopRowChanged 应该在界面刷新后响应的)
强制刷新更不能用。错位、卡顿等。

9 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-3-20 16:08:21
沙发
1. 我们的策略是和Excel保持一致的,锁定了是无法粘贴的。
如果您要实现,可以重写ctrl + v的action,在自定义的action中先将protect 设置为false,然后调用paste action。
然后在pasting 事件中,缓存当前数据,pasted之后将locked单元格还原,并设置protect 为true;
2. TopRowChanged 事件的参数本身就由 oldrow 和newrow
http://sphelp.grapecity.com/webh ... pRowChanged_EV.html
回复 使用道具 举报
coolmayi
注册会员   /  发表于:2017-3-20 17:49:25
板凳
dexteryao 发表于 2017-3-20 16:08
1. 我们的策略是和Excel保持一致的,锁定了是无法粘贴的。
如果您要实现,可以重写ctrl + v的action,在自 ...

谢谢答复,
oldrow 和newrow 是可以拿到的。
现在的问题是TopRowChanged 方法进行中的时候,组件是没有更新的。

我需要再TopRowChanged 中 获取选中单元格的坐标信息。sheet.getCellRect(row, col),
但是TopRowChanged中,获取的永远是选中单元格的上一个坐标信息。因为这时候界面上 topRow还没有从1变成3。
个人理解上这个不应该叫TopRowChanged,而是应该叫TopRowChanging。

我在TopRowChanged 中添加
activeSheet.isPaintSuspended(false)
可以正确获取坐标信息(强制前台刷新了) 但是有很多其他问题。



回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-3-20 19:36:49
地板
可否描述下你这么做的目的?
这里TopRowChanged可能和您的理解有些不同,TopRowChanged的时机是滚动后toprow变化了,这时还没有开始重新绘制页面。 不建议您在事件中强制重绘页面,后面还有其他要处理的。
应该可以用setTimeout 解决您的问题,不过建议还是您描述下你的需求,看看有没有更好的方案
回复 使用道具 举报
coolmayi
注册会员   /  发表于:2017-3-20 21:39:13
5#
dexteryao 发表于 2017-3-20 19:36
可否描述下你这么做的目的?
这里TopRowChanged可能和您的理解有些不同,TopRowChanged的时机是滚动后topr ...

感谢回复,
已经解决了,根据newRow手动计算了目标单元格所在的坐标。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-3-21 10:51:03
6#
回复 使用道具 举报
coolmayi
注册会员   /  发表于:2017-3-28 12:04:42
7#

又发现点小问题。
BaseCellType和冻结列的问题。

cellType中添加getHitInfo方法,有返回值的情况下,并且有冻结列,再切换单元格会有明显的卡顿情况。我的浏览器是chrome。

http://runjs.cn/code/uzfkszof

可以在上面代码js页面 第七行中添加
sheet.setFrozenColumnCount(2) ,再切换单元格就明显卡顿。行冻结没有这个问题。

或者去掉getHitInfo的return代码,也会变成流畅的。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-3-28 16:58:19
8#
您这里的切换单元格是一个什么样的操作,我移动鼠标没有感觉到卡顿
回复 使用道具 举报
coolmayi
注册会员   /  发表于:2017-3-28 17:23:01
9#
本帖最后由 coolmayi 于 2017-3-28 17:27 编辑
dexteryao 发表于 2017-3-28 16:58
您这里的切换单元格是一个什么样的操作,我移动鼠标没有感觉到卡顿

正常点了鼠标左键,立刻会显示单元格选中的选中框。
但是加了冻结之后,
点了鼠标左键后,大概要0.3或者0.5秒(个人感觉,就是有延迟),单元格才能出现选中框
或者你快速从C3拖到K13,选中一个区域。
不加冻结:丝般润滑,可能看到选择区域的增加过程。
加了冻结:会卡顿一下,然后整个选择区域有出来了,递增的过程也看不到了

理论上,加个冻结应该不会影响到,但是其他的自定义单元格类型也会有影响。比如之前加的 换行下拉框的类型。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-3-29 09:26:41
10#
我这边没有感觉到加了 sheet.setFrozenColumnCount(2)  会有明显差异,就加这一句话就可以了吗?
您用的什么浏览器?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部