找回密码
 立即注册

QQ登录

只需一步,快速开始

dybxin
初级会员   /  发表于:2024-2-27 15:33  /   查看:519  /  回复:3
10金币
本帖最后由 Richard.Huang 于 2024-3-8 10:38 编辑

产品:SpreadJS

我原来的导出方式:
  1. const blob = new Blob([response.data], {
  2.   type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;",
  3. });
  4. console.log(blob, "blob");
  5. const url = window.URL.createObjectURL(blob);
  6. // .....忽略部分
  7. // 模拟用户点击下载链接
  8. document.body.appendChild(link);
  9. link.click();
复制代码
现在我希望在拿到blob文件流的时候用:excelIO.save 方法 调用FaverSaver.saveAs来导出, 这里不要再前端渲染显示。 我这样做的目的时要保证下载下来的excel添加保护机制,以防后续上传时,部分不能
编辑的数据被修改。




最佳答案

查看完整内容

了解了,基本思路上没有什么问题,按照我上文中提到的在初始化SpreadJS的时候不要为其指定DOM即可。

3 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-27 15:33:59
来自 4#
了解了,基本思路上没有什么问题,按照我上文中提到的在初始化SpreadJS的时候不要为其指定DOM即可。
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-27 17:16:13
2#
您好,我梳理一下,也就是说您现在想要实现两个需求:

1、用ExcelIO.save来导出Excel文件。
2、在导出时不在前端渲染显示,防止数据被用户修改。

对吗?

如果是这样的话,ExcelIO.Save方法需要Spread的JSON数据,您的blob流是JSON数据吗?

不想在前端显示的话只要在初始化SpreadJS的时候不为其指定挂载的DOM即可。
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
dybxin
初级会员   /  发表于:2024-2-27 18:40:04
3#
本帖最后由 dybxin 于 2024-2-27 18:41 编辑
Joestar.Xu 发表于 2024-2-27 17:16
您好,我梳理一下,也就是说您现在想要实现两个需求:

1、用ExcelIO.save来导出Excel文件。

抱歉,之前我描述的不清楚。

我重新组织下:  数据列表用的是elementui table组件渲染的。下载导出原来用的是link的方式导出,这里是api返回的blob,我直接用link的方式导出。

现在是用户提出, 要方便将文件下载到本地去修改, 然后再回传,回传之后修改的数据再在elementui table上标识出来。

由于是将文件下载到本地的,所以要限制用户某些列不能修改 只允许修改部分列,所以才想到使用excelIO.save方法去保存, 主要是这样能开启表单保护功能,不让用户随便修改数据,以防回传的数据错乱。

我本来想的是用excelIO.open(blob, ((json) => {spread.fromJSON(json)})
const json = spread.toJSON()
然后再excelIO.save(json, (blob) => {
//开启表单保护
FaverSaver.saveAs(blob, 'wenjianming.xlsx')
})
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部