请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

有你好果子

注册会员

2

主题

5

帖子

13

积分

注册会员

积分
13
  • 59

    金币

  • 2

    主题

  • 5

    帖子

最新发帖
有你好果子
注册会员   /  发表于:2025-1-9 13:59  /   查看:98  /  回复:7
1金币
image.png183630675.png image.png718601684.png

图一是页面上的效果 第一列设置了可勾选的复选框。图二是导出sheet后的xlsx文件,但是原本的复选框没有显示,变成了空列。现在有两个问题。问题一:下载的文件能否支持复选框的展示?问题二:如果不能支持复选框的展示,想在导出的文件第一列直接展示序号列,怎样才能实现?
  1.         exportAction() {
  2.             const excelIo = new IO()
  3.             const fileName = '下载文件' + '.xlsx'
  4.             // 获取工作簿中的所有工作表数量
  5.             const sheetCount = this.spread.getSheetCount()
  6.             // 在导出前将表格解冻并删除所有 sheet 的第一列
  7.             for (let i = 0; i < sheetCount; i++) {
  8.                 const sheet = this.spread.getSheet(i)
  9.                 sheet.options.isProtected = false // 解冻表格
  10.                 sheet.deleteColumns(0, 1)//删除第一列
  11.             }
  12.             let json = this.spread.toJSON({
  13.                 includeBindingSource: true,
  14.             })

  15.             if (!json.sheets) {
  16.                 this.$message({
  17.                     type: 'warning',
  18.                     message: '无方案数据,无法导出',
  19.                 })
  20.                 return
  21.             }
  22.             excelIo.save(
  23.                 json,
  24.                 (blob) => {
  25.                     saveAs(blob, fileName)
  26.                 },
  27.                 function (e) {}
  28.             )
  29.         },
复制代码
用以上代码实现导出功能,但是用此方法又会产生新问题。导出的xlsx文件确实实现了第一列为序号列,但是原本sheet页面上的复选框会被删除。有什么办法能技能实现导出的文件第一例是序号开始,但又不影响原本页面上的sheet复选框的展示

最佳答案

查看完整内容

您好,猜测您使用了数据绑定功能,数据源在toJSON时不会默认携带,需要通过传参数来控制: 文档地址在这里:https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/workbook/json-serialization/purejs

7 个回复

倒序浏览
最佳答案
最佳答案
Matthew.Xue
超级版主   /  发表于:2025-1-9 13:59:01
来自 5#
本帖最后由 Matthew.Xue 于 2025-1-9 17:29 编辑
有你好果子 发表于 2025-1-9 17:09
但是原有的内容数据,导出的文件里全都丢失了

您好,猜测您使用了数据绑定功能,数据源在toJSON时不会默认携带,需要通过传参数来控制:
  1. let tempSpread = new GC.Spread.Sheets.Workbook()
  2. tempSpread.fromJSON(JSON.parse(JSON.stringify(spread.toJSON({includeBindingSource: true}))))
  3. // 删除tempSpread第一列
  4. // 导出tempSpread
  5. // ...
复制代码
文档地址在这里:https://demo.grapecity.com.cn/sp ... erialization/purejs
image.png393848571.png
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-1-9 15:34:14
2#
本帖最后由 Matthew.Xue 于 2025-1-9 15:38 编辑

您好,SpreadJS中的复选框一共有3种:
1. 单元格类型-复选框
2. 单元格类型-复选框列表
3. 控件-复选框
image.png172149962.png
image.png973715209.png

其中,前两种复选框是以自定义单元格类型的方式实现的,属于SpreadJS特有的复选框类型,它们的特点是复选框的值与单元格绑定,存在于某个单元格之内 而非浮动在画布的上方。由于Excel没有这种单元格类型,所以这种单元格类型导出到Excel后会丢失。
第三中复选框是SpreadJS和Excel同时支持的,特点是浮动于画布之上,无法直接和单元格的值做绑定,但可以导出Excel后会保留下来。

根据您的描述,您使用的应该是前两种复选框,所以的确无法导出到Excel。
如果想要在导出Excel的第一列就展示序号,您目前删除第一列的做法的确会导致网页SpreadJS中的复选框被删除,要保留的话可以考虑新建一个Spread实例,并在这个新建的实例中做删除第一列和导出的工作,这样就不会影响原Spread实例了,参考代码:

  1. let tempSpread = new GC.Spread.Sheets.Workbook()
  2. tempSpread.fromJSON(JSON.parse(JSON.stringify(spread.toJSON())))
  3. // 删除tempSpread第一列
  4. // 导出tempSpread
  5. // ...
复制代码


回复 使用道具 举报
有你好果子
注册会员   /  发表于:2025-1-9 17:00:26
3#
但是原有的内容数据,导出的文件里全都丢失了 image.png74714964.png
回复 使用道具 举报
有你好果子
注册会员   /  发表于:2025-1-9 17:09:13
4#
Matthew.Xue 发表于 2025-1-9 15:34
您好,SpreadJS中的复选框一共有3种:
1. 单元格类型-复选框
2. 单元格类型-复选框列表

但是原有的内容数据,导出的文件里全都丢失了
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-1-10 09:32:28
6#
您好,请问您的疑问是否已经解决了呢,如果解决了的话,这边就结贴啦
回复 使用道具 举报
有你好果子
注册会员   /  发表于:6 天前
7#
感谢 已经解决了
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:4 天前
8#
感谢支持~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部