找回密码
 立即注册

QQ登录

只需一步,快速开始

epsoft

初级会员

12

主题

35

帖子

360

积分

初级会员

积分
360

活字格认证

epsoft
初级会员   /  发表于:2017-5-12 12:36  /   查看:4468  /  回复:7
需求背景:
    1- 使用spreadWinform平台做模板设计器,把设计出来的模板生成json后存储。生成的json格式字符串很大,有8MB多
    2- 利用GrapeCity.Spread.Sheets.ExcelIO.Exporter对象把1中json数据转换成stream供spreadWinform加载,出现效率问题

问题:
    Exporter对象把json格式数据转换成stream时,需要7s左右


版本:
GrapeCity.Spread.Sheets.ExcelIO.Exporter版本9.40.20153.0
spreadWinform版本8.40.20151.0

演示demo:
    1-为方便演示,已把json格式字符串(8MB+)压缩
    2-demo环境  vs2012+.net 4







spreadExporter.7z

2.63 MB, 下载次数: 318

7 个回复

倒序浏览
epsoft
初级会员   /  发表于:2017-5-12 12:42:21
沙发
补充:
   json格式数据的生成步骤如下:
    1- GrapeCity.Windows.SpreadSheet.UI.GcSpreadSheet对象的SaveExcel方法生成Stream
    2-GrapeCity.Spread.Sheets.ExcelIO.Importer对象的ImportExcel方法把stream生成json格式的字符串

附件为设计出来的模板

temp.xlsx

628.67 KB, 下载次数: 296

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-5-12 15:52:58
板凳
epsoft 发表于 2017-5-12 12:42
补充:
   json格式数据的生成步骤如下:
    1- GrapeCity.Windows.SpreadSheet.UI.GcSpreadSheet对象的 ...

看了一下您的模板,多余的空白行和空白列删掉的话,json字符串大小应该会小很多
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-5-12 16:16:13
地板
您这个Excel 有503列,还都是没有数据的,把columnCount 重新设置下就好了。我测试把columnCount 设置到30,一秒内就导出了。
您winfrom设置excel时候检查下,那个Excel 的列数。
回复 使用道具 举报
epsoft
初级会员   /  发表于:2017-5-12 16:45:06
5#
感谢两位的回复,解决效率问题的思路我理解是模板无用的行列要删除,模板越小效率越快。

设置下columncount为【有效区域】值,效率确实快。

但是模板设计的习惯是直接在excel设计,然后导入进来,导入进来后再手动的删除无效的行列有点麻烦。咱们的spread是否有【有效行列数】属性来方便的控制,类似于微软 owc控件的 UsedRangeColumnCount
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-5-12 17:28:35
6#
js这边没有类似的方法。

winfrom 有 fpSpread1.ActiveSheet.NonEmptyColumnCount
回复 使用道具 举报
epsoft
初级会员   /  发表于:2017-5-12 19:44:10
7#
NonEmptyColumnCount测试后不是我想要的,谢谢你的回复。
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-5-15 14:59:33
8#
epsoft 发表于 2017-5-12 19:44
NonEmptyColumnCount测试后不是我想要的,谢谢你的回复。

如果不适用,那么目前也没有更好的方法了,只能进行手动处理了,如果有好的方法来处理您的问题我们会第一时间通知您。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部