找回密码
 立即注册

QQ登录

只需一步,快速开始

dybxin
初级会员   /  发表于:2024-3-14 13:02  /   查看:473  /  回复:7
10金币
本帖最后由 Richard.Huang 于 2024-3-15 09:34 编辑

产品:SpreadJS

1. 通过接口获取到要导出的文件的流
2. 使用excelIO.save(json, (blob) => {}),来导出excel文件
3. 不需要挂在dom, 前端不需要显示

var spread = new GC.Spread.Sheets.Workbook();
但是这里save方法需要json, 所以我还需要使用open方法将其处理
const blob = new Blob([res.data]);
let excelIO = new IO();
excelIO.open(blob, ((json) => {  
      spread.fromJSON(json);
})

然后
const json = spread.toJSON();
在调用excelIO.save(json, (blob) => {})。。  我这个必须要 通过open方法转一下吗?  可以提供个示例吗?

最佳答案

查看完整内容

excelIO.open有一个导入完毕的回调函数,可以在回调函数中修改json,然后再导出。

7 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-3-14 13:02:18
来自 8#
excelIO.open有一个导入完毕的回调函数,可以在回调函数中修改json,然后再导出。

image.png70122679.png
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-3-14 13:47:32
2#
您好,我想跟您确认一下,您的文件流具体是什么文件呢?是Excel文件?还是ssjson?
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
dybxin
初级会员   /  发表于:2024-3-14 13:54:35
3#
Joestar.Xu 发表于 2024-3-14 13:47
您好,我想跟您确认一下,您的文件流具体是什么文件呢?是Excel文件?还是ssjson?

excel文件
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-3-14 14:08:52
4#
我没太明白,如果要将Excel文件流保存为Excel文件的话,完全是不需要SpreadJS来处理的,如:

1、使用 Fetch API 或 XHR 请求:

fetch('http://example.com/download')
  .then(response => response.blob())
  .then(blob => {
    const url = URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    link.download = 'filename.ext';
    link.click();
  });

2、使用 HTML5 的 download 属性:

const link = document.createElement('a');
link.href = 'http://example.com/download';
link.download = 'filename.ext';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);

3、使用 FileSaver.js 库:

import { saveAs } from 'file-saver';
fetch('http://example.com/download')
  .then(response => response.blob())
  .then(blob => {
    saveAs(blob, 'filename.ext');
  });

以上提供的三个方法都可以实现将Excel文件流保存为Excel文件的需求,如果一定要使用SpreadJS的话,则需要先使用excelIO.open来将blob流打开,然后再toJSON,最后再excelIO.save来保存。
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
dybxin
初级会员   /  发表于:2024-3-14 14:16:31
5#
Joestar.Xu 发表于 2024-3-14 14:08
我没太明白,如果要将Excel文件流保存为Excel文件的话,完全是不需要SpreadJS来处理的,如:

1、使用 Fe ...

我本身也是用的第二中方式实现的, 但是目前的场景需要将下载导出的excel修改某一列的数据后再回传给后端,  这时候要限制只能修改 某一列的数据, 其他的都不能改。并且不能删除行列等。 所以想到要加上保单保护的设置。
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-3-14 14:32:18
6#
了解了,如果是这样的话,那就只能先使用excelIO.open来将blob流打开,做一些业务上的操作,然后再toJSON,最后再excelIO.save来保存。
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
dybxin
初级会员   /  发表于:2024-3-14 15:02:07
7#
Joestar.Xu 发表于 2024-3-14 14:32
了解了,如果是这样的话,那就只能先使用excelIO.open来将blob流打开,做一些业务上的操作,然后再toJSON, ...

这里我咋样我才能知道excelIo.open已经完成了? 因为我如果不在excelIo.save() 之外包裹一个setTime()延时机制的话,会出现下载下来的excel内容为空的情况。但是加setTime的话具体延时多久会是个问题。

let tempSpread = new GC.Spread.Sheets.Workbook();
const blob = new Blob([res.data]);
let excelIO = new IO();
excelIO.open(blob, ((json) => {
      tempSpread.fromJSON(json)
      //设置表单保护              
}))

const json = tempSpread.toJSON();
excelIO.save(blob, ((json) => {
      tempSpread.fromJSON(json)
      //设置表单保护              
}))
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部