找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

141

主题

261

帖子

1678

积分

超级版主

Rank: 8Rank: 8

积分
1678
Winny
超级版主   /  发表于:2022-10-29 00:38  /   查看:3769  /  回复:4
本帖最后由 Winny 于 2022-12-23 15:30 编辑

新功能背景:
在SpreadJS V16之前,关于文件toJSON()之后,生成的json文件太大,一直被很多客户诟病。例如,同样一个文件,导出Excel文件只有几KB,而导出的JSON文件会有几MB。这直接导致的问题有:
(1)导出文件太大,前后端传输消耗带宽,占用存储空间;
(2)toJSON()时间过长,导致浏览器无法去做其它事情,只能一直等待,影响客户体验及性能。

为解决上述问题,SpreadJS V16设计了一种新的JSON文件格式(SJS),减小JSON文件体积,提升客户的使用体验。与原始excelIO导入/导出文件不同,spreadJS V16提供了一个名为“IO”的插件。它不仅支持excelIO已经支持的所有模块,还可以很好地支持大文件的导入/导出,同时提供了一种为大文件部分加载工作表的方法。
V16在SpreadJS与Excel文件格式转换之间仅需要一步,在这个步骤中产生的文件格式就是V16新的文件格式SJS,而V16之前在SpreadJS与Excel文件格式转化时则需要两步。新的SJS文件格式是一个压缩文件。其中包含一些小的sjsjson文件,与Excel的xml结构类似
image.png260611876.png
对于老版本的ssjson文件,SpreadJS会继续支持,因此也不需要担心产品升级后造成老版本的文件不可用。对于新的sjs文件格式,在在线表格编辑器中,操作如下图所示:

sjsexport.gif470739135.png
这里我使用的文件是之前客户提供的一个导入很慢的大文件,经过测试,老版本的文件格式导入需要43s,而新版本的文件格式导入仅需2s,今后客户再也不会吐槽文件导入慢了。在导出时,除了可以选择导出Excel文件、SSJSON文件,V16新增的就是上图中演示的SJS文件,在导入操作中,也同时支持了SJS格式的文件导入。但是需要注意的时,V16导出SJS时,对集算表及密码部分并没有提供支持,后期产品会继续开发这些模块,让我们一起期待吧。

以上讲解的都是UI上的操作行为,文章最后,我们一起来了解一下导入导出SJS文件的代码编写。
1. 引入导入导出SJS文件相关的IO插件
  1. <script src="plugins/gc.spread.sheets.io.xxx.js"></script>
复制代码
2. 导入SJS文件
  1. spread.open(fileBlob, function () {
  2.    // success callback to do something
  3. }, function (e) {
  4.   console.log(e); // error callback
  5. }, { incrementalLoad: true })
复制代码
3. 导出SJS文件
  1. spread.save(function (blob) {
  2.    // save blob to a file
  3.    saveAs(blob, fileName);
  4. }, function (e) {
  5.    console.log(e);
  6. })
复制代码
最后,需要提醒的是,V16之后Excel,SSJSON,CSV文件不再使用open和save方法,而是统一改用import及export方法。这样做可以对不同文件提供统一入口支持,降低客户编程复杂度。详细的代码示例如下:
1. 导入文件
  1. spread.import(fileBlob, function () {
  2.    // success callback to do something
  3. }, function (e) {
  4.   console.log(e); // error callback
  5. }, { incrementalLoad: true })
复制代码
2. 导出文件
  1. spread.export(function (blob) {
  2.    // save blob to a file
  3.    saveAs(blob, fileName);
  4. }, function (e) {
  5.    console.log(e);
  6. }, GC.Spread.Sheets.ExportFileType.excel, {});
复制代码
相关的导出文件枚举类型如下:
  1. export enum ExportFileType {
  2.     /**
  3.     * Export excel type file.
  4.     */
  5.     excel = 0,
  6.     /**
  7.     * Export ssjson type file.
  8.     */
  9.     ssjson = 1,
  10.     /**
  11.     * Export csv type file.
  12.     */
  13.     csv = 2

  14. }
复制代码


预览版已经可以申请体验了 -> https://gcdn.grapecity.com.cn/fo ... d=157554&fromuid=72


4 个回复

倒序浏览
时光不老
注册会员   /  发表于:2023-2-23 15:22:48
推荐
请问如何用spread.fromJSON() 加载 sjs文件
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-2-23 17:23:41
板凳
fromJSON是不行的,这个接口是加载ssjson格式用的
加载sjs的后缀文件有专用的open方法去加载。
回复 使用道具 举报
阿仁
金牌服务用户   /  发表于:2023-7-31 10:58:15
地板
Clark.Pan 发表于 2023-2-23 17:23
fromJSON是不行的,这个接口是加载ssjson格式用的
加载sjs的后缀文件有专用的open方法去加载。

你好,麻烦问下你说的专有open方法是api吗?我直接spread.import文件的blob,报错文件格式不正确
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-7-31 11:22:10
5#
阿仁 发表于 2023-7-31 10:58
你好,麻烦问下你说的专有open方法是api吗?我直接spread.import文件的blob,报错文件格式不正确

您好,我看您发了一个帖子,我们在那个帖子里面沟通。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部