请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

artman5545

中级会员

31

主题

93

帖子

901

积分

中级会员

积分
901
artman5545
中级会员   /  发表于:2018-9-5 09:24  /   查看:7037  /  回复:13
本帖最后由 artman5545 于 2018-9-5 09:44 编辑

你好:我们的表格需求是制作一个有复合表头的表格,字段有36-38个,其中有的列需要验证数据格式,有的列是不允许填写的,有的列是根据公式计算获得,我在制作的过程中出现了几个问题想请教一下;
1. 我使用sheet.setDataSource(source);方式把数据绑定在表格中,根据规则绑定数据后表格行数和数据条数一致,没有空白行,为了方便用户填报需要留几十行空白行,我使用sheet.addRows(data.total + 3, 50);添加空白行,但是根据var rows = sheet.getDataSource().xf.rows;获取到的集合,新加的行是在添加在表格外面的,无法获取到,而且单元格是锁定状态无法编辑;
2. 鉴于要显示多行的复合表头,无法使用excel表格原生标题,我把标题隐藏后在第一行和第二行设置了自己的标题行并对两行进行锁定和排序过滤,在使用中排序完全没有效果,过滤的效果很诡异,显示如下,过滤“三角塘双线大桥”只是把1-7和9-19行过滤掉了,我估计是因为我在编辑器中把模板表格只设置到了第19行的原因;
1.png 2.png 3.png
3. excel.io导出功能把数据导出excel后,日期格式和web中显示不一致"/Date(xxxxxxxxxxxx)/",并且我所设置的复合表头所合并的单元格都被拆散还原了,同时冻结行/列效果也不在了,代码如下:
            var spread = $("#spreadPicture").data("workbook");
            var json = spread.toJSON({ includeBindingSource: true, ignoreStyle: true, ignoreFormula: true, columnHeadersAsFrozenRows: true });
            new GC.Spread.Excel.IO().save(json, function (blob) {
                saveAs(blob, "下载的表格.xlsx");
            }, function (e) { console.log(e); })S:附上模板与数据 模板与数据.rar (8.16 KB, 下载次数: 287)

13 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-5 13:46:47
沙发
1.第一个问题可以用resize来解决,参考附件demo2.如果在rowfilter的范围最后一行下面再添加行,rowfilter是不会跟着变化的,因为无法判断该行要不要被rowfilter。这个需要手动去掉filter后重新添加。
3.原因是因为您设置了ignoreStyle: true 忽略了样式导致的。不要设置这个导出就没有问题。

bindDataSource.html

2.1 KB, 下载次数: 243

回复 使用道具 举报
artman5545
中级会员   /  发表于:2018-9-6 08:43:20
板凳
ClarkPan 发表于 2018-9-5 13:46
1.第一个问题可以用resize来解决,参考附件demo2.如果在rowfilter的范围最后一行下面再添加行,rowfilter是 ...

直接使用table.resize(row,col)会报错,说是超出表单的行,然后在前面使用sheet.addrows()添加行,会出现成功在表格中添加行,但是表格外也会添加空白行的情况,还有排序也没有起效,何解?
请问一下spreadjs设计思路是什么?我在表格中添加的行但是在表格中引用的样式,公式等均不会在表格的新增行中起效,必须写代码重新设置,这样使用设计器的意义大大折扣,本来用设计器的用意是简化代码加快开发速度的,更有利于spreadjs的推广。
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-6 17:53:06
地板
1.用setRowCount将行数改成合适的,再resize添加行。
2.rowfilter是不会跟着变化的,因为无法判断该行要不要被rowfilter。这个需要手动去掉filter后重新添加。
3,添加行是这样的,addRows就是单纯的添加行, 不会复制样式,如果需要,还需要copyto来复制样式
回复 使用道具 举报
artman5545
中级会员   /  发表于:2018-9-6 19:22:07
5#
本帖最后由 artman5545 于 2018-9-7 09:57 编辑
ClarkPan 发表于 2018-9-6 17:53
1.用setRowCount将行数改成合适的,再resize添加行。
2.rowfilter是不会跟着变化的,因为无法判断该行要不 ...

1. 经验证,setRowCount和addRows效果一样。
2. 时间格式导出Excel变成/Date(1535472000000)/怎么办?
3. 还有排序没有生效
4. 复制粘贴行数超过rowCount需要自动增加行
5. getDeletedRows中[size=13.3333px]row.originalItem为NULL
ssjson和data.rar (7.28 KB, 下载次数: 253)
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-7 18:28:55
6#
1.我们已经当做问题来反应。
2./Date()/问题是这样的,因为考虑到事件format的情况,所以存储的时候不会去存字符串,而是存的date,这个通过json对象传输到后端,后端都会有对应的解析类型,这个您可以具体看一下,一般不需要循环特殊处理的。
3.这个问题重现了,我和研发这边正在调查原因。
4.spread.options.allowExtendPasteRange = true
5.我帮您问了研发,原因是这样的表格绑定不会存在,因为表格绑定是部分行而不是一整行,无法拿到整行的信息,故originalItem为NULL。这块目前的处理机制是改写右键删除菜单的逻辑,在其中添加获取删除行信息的操作。
这块我们也有进行需求反馈,希望在事件中能够获取,这块相关部门正在讨论。有结果我再给您说一下。您可以先按照上面的workaround来解决。
回复 使用道具 举报
artman5545
中级会员   /  发表于:2018-9-10 10:08:29
7#
ClarkPan 发表于 2018-9-7 18:28
1.我们已经当做问题来反应。
2./Date()/问题是这样的,因为考虑到事件format的情况,所以存储的时候不会去 ...

2. 那么导出的时间格式应该如何处理呢?因为数据量比较大,我不希望进行时间循环格式化,还有我设置了表单保护,导出的excel能否解除锁定呢?
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-10 15:18:23
8#
1.这个是要处理一下,/date()/这个格式是为了解决时区的问题,需要转换一下,可以利用tag来转换,如下图所示
image.png404876098.png
2.导出之前先取消保护,导出之后再重新设置保护即可。
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-11 12:00:23
9#
扩展粘贴问题可以这样解决
1.通过var ds = sheet.getDefaultStyle()获取默认样式
2.设置默认样式中的locked为false var ds = sheet.getDefaultStyle()
3.将需要保护的单元格的locked属性设置为true
4.设置扩展粘贴
5.设置表单保护
6.之后复制粘贴即可
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-11 15:06:46
10#
filter的问题我按照我之前电话给您沟通的方法改了一下,没有问题了,我把demo上传,您参考一下,至于您说按照我说的方法不行,您可以参照demo对比一下

demo.zip

17.09 KB, 下载次数: 234

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