V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
powertoolsteam
V2EX  ›  推广

实现序列化与反序列化 Excel 表格

  •  
  •   powertoolsteam · 2019-02-14 12:29:12 +08:00 · 1302 次点击
    这是一个创建于 2113 天前的主题,其中的信息可能已经有所发展或是发生改变。

    SpreadJS 表格控件有着很强大的功能:序列化与反序列化表格。熟练使用该功能达到加快开发进度,减少代码量,降低业务逻辑复杂度,处理一些特殊逻辑需求等效果。

    功能使用介绍:

    1.序列化:

    通过序列化可以将当前的整个 spread 序列化成为 JSON 格式进行存储。通过 spread.toJSON(serializationOption)方法就可以做到,方法中还提供一些选项可以用来控制序列化的结果:

    var serializationOption = {
        ignoreFormula: true, // 如果设置为 true 则忽略公式,不会序列化公式,只会将公式计算的结果序列化到 JSON 中。
        ignoreStyle: true, // 如果设置为 true 则忽略样式,所有 style 中的属性将不会序列化到 JSON 中
        rowHeadersAsFrozenColumns: true, // 将行头转换为冻结列序列化
        columnHeadersAsFrozenRows: true, // 将列头转换为冻结行序列化
        includeBindingSource: true // 将数据绑定的数据源也序列化到 json 中
    }
    

    2.反序列化:

    通过反序列化可以将之前序列化的 JSON 格式的对象反序列化成为页面进行展示。通过 spread2.fromJSON(json, jsonOptions)方法可以做到,同样方法中也提供一些选项来控制反序列化的结果:

    var jsonOptions = {
        ignoreFormula: true, // 如果设置为 true 则忽略公式,反序列化时忽略公式,只会将公式计算的结果反序列化展示到页面中。
        ignoreStyle: true, // 如果设置为 true 则忽略样式,不会将 style 中的属性反序列化展示
        frozenColumnsAsRowHeaders: true, // 将冻结列转换为行头           
        frozenRowsAsColumnHeaders: true, // 将冻结行转换为列头
        doNotRecalculateAfterLoad: true, //  反序列化后公式不进行重新计算
    }
    

    常见使用场景:

    1、 在设计器中使用序列化和反序列化:

    通过 SpreadJS 提供的设计器可以快速的进行模板设计,设计器中可以通过拖拽,点击,配置等操作快速进行模板设置从而节省大量的代码编辑操作。当在设计器中设计好模板之后可以通过设计器提供的导出功能,将模板导出成 ssjson 文件(该文件就是将序列化 toJSON 之后生成 JSON 格式保存成的文件)。

    在页面展示的时候我们可以在 js 中读取该文件(例如 jquery 的$.getJSON(),通过 js 文件读取等方式),并将获取到的 json 对象通过 spread.fromJSON 反序列化成页面展示。这样就完成了模板的快速构建。

    2、 差异化处理:

    在用户的业务逻辑中经常需要进行一些差异化的处理,例如:填报模板的中设置的公式,不希望在导出的时候被导出。那么可以通过在 tojson 中进行设置来忽略。

    3、 多列头的导出:

    SpreadJS 中有一些扩展的功能例如多列头是 Excel 不支持的,而该功能经常在业务逻辑中被使用,所以如果有同时需要导出 Excel 的处理这种鱼和熊掌不可兼得的事情往往会产生很多困扰,那么为了解决这样的问题,在导出之前的 toJSON 时就可以通过设置 columnHeadersAsFrozenRows 属性,之后将生成的 json 在导出时传递给 ExcelIO,这样导出的 Excel 中会将 SpreadJS 的多列头通过冻结行来进行显示。

    设置了多行头与多列头,要想导出 Excel 中包含行头和列头的信息,可以在 toJSON 的时候设置 rowHeadersAsFrozenColumns 与 columnHeadersAsFrozenRows 这两个属性,那么导出之后就可以将行头列头信息显示在 Excel 中。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5521 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:47 · PVG 15:47 · LAX 23:47 · JFK 02:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.