找回密码
 立即注册

QQ登录

只需一步,快速开始

__贪心

注册会员

10

主题

27

帖子

89

积分

注册会员

积分
89
__贪心
注册会员   /  发表于:2020-11-27 16:36  /   查看:3206  /  回复:8
本帖最后由 __贪心 于 2020-12-9 16:01 编辑

带有图表的Sheet,无法通过 toJSON/fromJSON的方式复制
  1. function copySheet(spread: GC.Spread.Sheets.Workbook, sheetName: string) {
  2.     const sheet = spread.getSheetFromName(sheetName);
  3.     const copySheetName = sheetName + '_copy';

  4.     // 拷贝数据
  5.     const newSheet = new GC.Spread.Sheets.Worksheet(copySheetName);
  6.     newSheet.fromJSON(sheet.toJSON());
  7.     newSheet.name(copySheetName);

  8.     spread.addSheet(0, newSheet);
  9. }
复制代码
以上方式复制一个sheet,当源sheet中存在图表时,会报错:
  1. Uncaught TypeError: Cannot read property 'getSheetFromName' of undefined
  2.     at Worksheet.GC.Spread.Sheets.Charts../dist/plugins/chart/chart-spreadjs.js.worksheetPrototype._GetSheet (index.js?3c41:6586)
  3.     at Series.GC.Spread.Sheets.Charts../dist/plugins/chart/series.js.Series.UpdateNameByRefer (index.js?3c41:19739)
  4.     at Series.GC.Spread.Sheets.Charts../dist/plugins/chart/series.js.Series.UpdateNameRefer (index.js?3c41:19630)
  5.     at Series.GC.Spread.Sheets.Charts../dist/plugins/chart/series.js.Series.SetNameRefer (index.js?3c41:19612)
  6.     at Series.GC.Spread.Sheets.Charts../dist/plugins/chart/series.js.Series.UpdateNameFormula (index.js?3c41:19558)
  7.     at Series.GC.Spread.Sheets.Charts../dist/plugins/chart/series.js.Series.FromCT_SerTx (index.js?3c41:21604)
  8.     at Series.GC.Spread.Sheets.Charts../dist/plugins/chart/series.js.Series.FromCT_CatValSerBase (index.js?3c41:21032)
  9.     at Series.GC.Spread.Sheets.Charts../dist/plugins/chart/series.js.Series.FromCT_BarSer (index.js?3c41:20703)
  10.     at Series.GC.Spread.Sheets.Charts../dist/plugins/chart/series.js.Series.FromOOModel (index.js?3c41:20522)
  11.     at SeriesCollection.GC.Spread.Sheets.Charts../dist/plugins/chart/series.js.SeriesCollection.RestoreSeriesImp (index.js?3c41:24470)
  12.     at SeriesCollection.GC.Spread.Sheets.Charts../dist/plugins/chart/series.js.SeriesCollection.RestoreSeries (index.js?3c41:24358)
  13.     at PlotArea.GC.Spread.Sheets.Charts../dist/plugins/chart/plotArea.js.PlotArea.FromOOModel (index.js?3c41:15938)
  14.     at ChartModel.GC.Spread.Sheets.Charts../dist/plugins/chart/chart.js.ChartModel.FromCT_Chart (index.js?3c41:8727)
  15.     at ChartModel.GC.Spread.Sheets.Charts../dist/plugins/chart/chart.js.ChartModel.FromOOModel (index.js?3c41:8607)
  16.     at Chart.GC.Spread.Sheets.Charts../dist/plugins/chart/chartview.js.Chart.fromJSON (index.js?3c41:13150)
  17.     at Worksheet.fromJsonAfterFormula (index.js?3c41:7051)
  18.     at Object.eval (index.js?603e:117048)
  19.     at _each (index.js?603e:168185)
  20.     at Worksheet.GC.Spread../dist/plugins/sheetsCalc/worksheet-formula.js.worksheetPrototype.formulaFromJSON (index.js?603e:117045)
  21.     at Worksheet.fromJson (index.js?603e:117614)
  22.     at Object.eval (index.js?603e:29517)
  23.     at _each (index.js?603e:168185)
  24.     at Worksheet.fromJSON (index.js?603e:29514)
复制代码



2020-12-09 15.52.29.gif

8 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-11-27 17:58:59
沙发
您好,我这边测试是没问题的,没能重现您的问题
image.png432641295.png
image.png43052367.png
猜测是图表引用数据的公式问题,建议您发一个能够重现的demo,我们深入调查一下
回复 使用道具 举报
__贪心
注册会员   /  发表于:2020-11-30 11:00:54
板凳
ClarkPan 发表于 2020-11-27 17:58
您好,我这边测试是没问题的,没能重现您的问题

可以将您的demo发出来看一下不?我看看是不是绘图的方式不一样。另外,我用的是v13的版本
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-11-30 14:07:12
地板
我是用在线表格编辑器进行重现的,没能重现,所以怀疑可能是您的图表数据的问题,建议您提供一个能够重现问题的demo,我们具体看看什么原因。
回复 使用道具 举报
__贪心
注册会员   /  发表于:2020-12-1 14:56:03
5#
  1. function copySheet(spread, sheetName) {
  2.   const sheet = spread.getSheetFromName(sheetName);
  3.   const copySheetName = sheetName + '_copy';

  4.   // 拷贝数据
  5.   const newSheet = new GC.Spread.Sheets.Worksheet(copySheetName);
  6.   newSheet.fromJSON(sheet.toJSON());
  7.   newSheet.name(copySheetName);

  8.   spread.addSheet(0, newSheet);
  9. }
  10. copySheet(GC.Spread.Sheets.findControl(document.querySelector('.ss')), 'Sheet2')
复制代码

您好,我就是用你们的在线demo测试的呢 https://demo.grapecity.com.cn/SpreadJS/WebDesigner/
您可以试试,新建一个sheet2,然后随便输入点数据绘制柱状图,然后在控制台运行上诉代码,就会出现如下报错
image.png30635069.png

回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-12-1 15:33:19
6#
__贪心 发表于 2020-12-1 14:56
您好,我就是用你们的在线demo测试的呢 https://demo.grapecity.com.cn/SpreadJS/WebDesigner/。
您可以 ...

您好,您可以参考附件的代码,出现您描述的问题是因为您将addSheet放在fromJSON后,找不到对应的表单就会报错,下面是关键代码
  1. function insertChart(spread) {
  2.     var activeSheet = spread.getActiveSheet();

  3.     var copySheetName = "sheet1" + '_copy';

  4.     var newSheet = new GC.Spread.Sheets.Worksheet(copySheetName);
  5.     spread.addSheet(0, newSheet);

  6.     var jsonString = JSON.stringify(activeSheet.toJSON());

  7.     // newSheet.from
  8.     console.log(jsonString)

  9.     newSheet.fromJSON(JSON.parse(jsonString));

  10.     newSheet.name(copySheetName);

  11.   
  12.    
  13. }
复制代码


图表.zip

4.33 KB, 下载次数: 66

回复 使用道具 举报
__贪心
注册会员   /  发表于:2020-12-9 16:03:20
7#
DerrickJiao 发表于 2020-12-1 15:33
您好,您可以参考附件的代码,出现您描述的问题是因为您将addSheet放在fromJSON后,找不到对应的表单就会 ...



我使用了您说的方式,调整addsheet的时机确实可以防止报错了。但测试了下,这样执行了后,原来的图标就失去了跟数据的绑定关系。具体您可以查看上面的动图
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-12-9 17:16:19
8#
本帖最后由 DerrickJiao 于 2020-12-9 18:10 编辑
__贪心 发表于 2020-12-9 16:03
我使用了您说的方式,调整addsheet的时机确实可以防止报错了。但测试了下,这样执行了后,原来的图标 ...

问题已复现,我们会做进一步调研,有进展会更帖告知您,此贴为您改为保留处理。(SJS-6809
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-14 18:54:57
9#
您好,该问题已于14.2.0中修复,您可以升级后测试一下。
SpreadJS 17.0.9 | GcExcel 7.1.2 已发布~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部