SpreadJS支持直接导出的文件格式包括ssjson、sjs、excel、csv、pdf等,而完成导出任务的是第三方组件FileSaver.js。在一些数据量巨大的业务场景中,可能每张Worksheet中容纳了大规模数据,叠加起来使得Workbook文件超大。那么,可否在导出时将文件压缩,以此规避大文件传输。
先来看下SpreadJS官网API文档中关于Workbook:save()的介绍,如图1所示,第三方组件FileSaver.js的saveAs方法接受的文件参数类型为blob流。那么,如果在传递给saveAs执行导出前将Workbook文件压缩,并转换为blob流对象,是否就能成功导出为压缩文件呢?话不多说,说干就干。
图1. Workbook:save()详情
通过如下代码组织导出压缩文件的逻辑,运行效果如图2所示。附上demo,以供参考。
- spread.export(function (blob) {
- const zip = new JSZip();
- // 将 Blob 添加到 ZIP 文件中
- zip.file('example.xlsx', blob);
- // 生成 ZIP 文件
- zip.generateAsync({ type: 'blob' }).then((content) => {
- // 下载 ZIP 文件
- saveAs(content, 'spreads.zip');
- });
- }, function (e) {
- console.log(e);
- }, {
- fileType: GC.Spread.Sheets.FileType.excel
- });
复制代码
图2. 导出压缩文件
问题原帖:https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=228507
|
|