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

QQ登录

只需一步,快速开始

choys
金牌服务用户   /  发表于:2019-5-4 11:13  /   查看:3821  /  回复:3
本帖最后由 choys 于 2019-5-4 11:15 编辑

我设计了一个数据填报模板,通过调用bindColumns加载标题头,调用setDataSource()加载初始化数据,用户在线填报数据,通过getDatasource()接口即可获取在线填报的数据。现在是想用户即可在线填报,也可将模板导出为excel,本地填写后再上传,现在遇到几个问题:
1、导出为excel后,标题头是无法导出的2、导入excel数据后,无法通过datasource获取json格式的数据

请问这两个问题可通过什么方式解决,或者通过什么方式可保证在线填报和上传excel后获取数据的数据格式是一致的。是否支持通过api获取导入的excel的数据,数据加载由调用方自行处理?



3 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-5-5 10:52:48
沙发
您好,造成您的问题的根本原因在于Excel本身不支持所谓数据绑定的操作。

针对您的需求,实际上在线填报是没有问题的,

1、Excel不支持标题头,但SpreadJS可以把标题头导出成冻结行,您在导出Excel时,可以为toJSON传参columnHeaderAsFrozenRows,请参考API:

https://demo.grapecity.com.cn/sp ... orkbook~toJSON.html

2、如前所述,Excel不支持“数据源”的概念,因此导入Excel后,需要您编码获取用户填写的信息,通过getValue或getArray获取,参考API:

https://demo.grapecity.com.cn/sp ... sheet~getArray.html
回复 使用道具 举报
choys
金牌服务用户   /  发表于:2019-5-5 11:30:32
板凳
好的,谢谢,这个思路我是清楚的。现在的问题是导出excel本地填写后再次导入,原来的标题头就变成了第一行,我原来设置的数据校验规则认为第一行填写不合法。

我现在是想这样,导入excel之后,获取json,并不执行fromjson方法,通过操作json数据,获取数据,然后重新执行bindColumns()和dataSource()方法。比如通过json.columns()获取标题头,通过json.sheets['xx'].data.dataTable获取数据。

想问一下,这种方式是否可行,对于操作excel导入之后的json数据,有没有便捷的api?
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-5-5 18:22:51
地板
您好,实际上从SpreadJS导出到Excel后,数据绑定关系就已经不存在了,因为Excel本身没有数据绑定这个概念,

因此当您再导入Excel时,只能使用getValue和getArray执行获取数据的操作,

针对您的这个需求,您可以考虑将导出的文档设置成受保护的Excel文档,制止用户修改文档的结构,这样也许可以更简单地获取到用户填报的数据。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部