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

QQ登录

只需一步,快速开始

潘嗒嗒

注册会员

11

主题

37

帖子

130

积分

注册会员

积分
130
潘嗒嗒
注册会员   /  发表于:2025-5-7 14:02  /   查看:76  /  回复:5
10金币
本帖最后由 Wilson.Zhang 于 2025-5-9 11:14 编辑

由于reportsheet下载不带公式,所以想用以下步骤实现:

1、const backUpSheetJson = reportsheet.toJson
2、reportsheet.toWorksheet()
3、在worksheet手动插入公式
4、reportSheet.fromJson(backUpSheetJson)

现在有个问题是reportSheet.fromJson(backUpSheetJson)好像不能还原了

最佳答案

查看完整内容

不客气。 在需要将ReportSheet导出为PDF或xlsx文件或其他特殊操作时,可以将ReportSheet转换为Worksheet后操作。正如您的处理方式,新建一个Workbook容纳转换后的Worksheet。 问题既已得到解决,那就结贴了。如有新问题,欢迎发新帖沟通。

5 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2025-5-7 14:02:25
来自 6#
本帖最后由 Wilson.Zhang 于 2025-5-8 17:01 编辑
潘嗒嗒 发表于 2025-5-8 11:08
谢谢,我换了种方式解决了,我创建了临时的workbook进行了导出



不客气。

在需要将ReportSheet导出为PDF或xlsx文件或其他特殊操作时,可以将ReportSheet转换为Worksheet后操作。正如您的处理方式,新建一个Workbook容纳转换后的Worksheet。

问题既已得到解决,那就结贴了。如有新问题,欢迎发新帖沟通。


回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-5-7 17:28:53
2#
您好!参考您的描述,我对ReportSheet先通过ReportSheet:toJSON()获取序列化json数据,然后通过ReportSheet:fromJSON()在当前ReportSheet和另一个Designer中的ReportSheet反序列化,可见均可正常反序列化。由于另一个Designer中并没有ReportSheet所使用的数据源,因此预览模式下看不到实际数据,仅有表头存在。如下动图所示:
ReportSheet序列化反序列化.gif

我没有执行您的步骤3,因为ReportSheet:toWorksheet()根据ReportSheet获取对应的Worksheet,ReportSheet实例并未发生变化,其仍然存在,在界面上可见。对Worksheet插入公式不会影响ReportSheet,且转换所得的Worksheet存在于代码运行控件中,您应该也没有将其渲染在浏览器页面显示吧?!

如果我操作步骤不太符合您遇到问题时的操作步骤,您可以录屏演示下。
回复 使用道具 举报
潘嗒嗒
注册会员   /  发表于:2025-5-7 18:03:04
3#
Wilson.Zhang 发表于 2025-5-7 17:28
您好!参考您的描述,我对ReportSheet先通过ReportSheet:toJSON()获取序列化json数据,然后通过ReportSheet ...
  1. const onExport = () => {
  2.     if (!spreadSheets.current) return
  3.     const spread = spreadSheets.current
  4.     const spreadJson = spread.toJSON()

  5.     for (var i = spread.getSheetTabCount() - 1; i >= 0; i--) {
  6.       var sheet = spread.getSheetTab(i).toWorksheet()
  7.       // sheet.setFormula(2, 1, '=D2')
  8.       spread.removeSheetTab(i)
  9.       spread.addSheet(0, sheet)
  10.     }
  11.     spread.export(
  12.       function (blob: any) {
  13.         saveAs(blob, generateFileName())

  14.         spread.fromJSON(spreadJson, {
  15.           doNotRecalculateAfterLoad: true,
  16.           incrementalLoading: true
  17.         })
  18.       },
  19.       function (e: any) {
  20.         console.log('save file error', e)
  21.       },
  22.       {
  23.         fileType: GC.Spread.Sheets.FileType.excel,
  24.         includeBindingSource: false,
  25.         includeFormulas: true,
  26.         includeStyles: true
  27.       }
  28.     )
  29.   }
复制代码


这是我实际的导出逻辑,我希望导出的是worksheet,所以有把sheetTab移除,但是导出完毕以后,我又希望把sheetTab 给还原回来,有办法实现吗
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-5-8 10:19:30
4#
潘嗒嗒 发表于 2025-5-7 18:03
这是我实际的导出逻辑,我希望导出的是worksheet,所以有把sheetTab移除,但是导出完毕以后,我又希 ...

按照您的描述,需要将Workbook中的ReportSheet转为Worksheet且删除ReportSheet后将Worksheet添加至当前Workbook,Workbook中便都是Worksheet,导出Workbook为xlsx文件的同时反序列化原Workbook。

如下动图所示,导出后xlsx文件中包含ReportSheet转换后的Worksheet,而且SpreadJS中Workbook也正常复原为包含ReportSheet的状态:
ReportSheet转Worksheet导出.gif

未能复现您描述的情况,请教下您测试发现的“不能还原”的具体现象是怎样的?ReportSheet不存在了,仍然是转换所得的Worksheet?还是其他情况?您可以提供下操作演示。
1746670746774.png525937194.png
回复 使用道具 举报
潘嗒嗒
注册会员   /  发表于:2025-5-8 11:08:30
5#
本帖最后由 潘嗒嗒 于 2025-5-8 11:19 编辑
Wilson.Zhang 发表于 2025-5-8 10:19
按照您的描述,需要将Workbook中的ReportSheet转为Worksheet且删除ReportSheet后将Worksheet添加至当前Wo ...

谢谢,我换了种方式解决了,我创建了临时的workbook进行了导出
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部