找回密码
 立即注册

QQ登录

只需一步,快速开始

ymslx_sjs

初级会员

49

主题

122

帖子

415

积分

初级会员

积分
415
ymslx_sjs
初级会员   /  发表于:2022-9-2 15:33  /   查看:1484  /  回复:4
1金币
有一个底色为白色的图表,在导出成图片时候,要将它变更了底色后再导出,但是原图表不变

想法:
将这个图表复制到新增的一个sheet上,变更了颜色后,导出
现在的问题就是变更了颜色后,没办法导出

实现的代码:
let chart1 = sheet.charts.all()[0];
if (!chart1) {
    return;
}

let copySheetName = "copySheet";

spread.addSheet(spread.getSheetCount(), new GC.Spread.Sheets.Worksheet(copySheetName));
spread.commandManager().execute({cmd: "copyFloatingObjects", sheetName: sheet.name() });
spread.commandManager().execute({cmd: "pasteFloatingObjects", sheetName: copySheetName});

let copysheet = spread.getSheetFromName(copySheetName);
let backColor = "#ffffff";
let chart = copysheet.charts.all()[0];
let chartArea = chart.chartArea();
chartArea.backColor = backColor;
chart.chartArea(chartArea);

// 这句话报错了
let canvas = chart.getHost()[0].querySelector("canvas");
let imgUrl = canvas.toDataURL("image/png");
const a = document.createElement('a')
a.href = imgUrl
a.setAttribute('download', dataKey)
a.click()

spread.removeSheetTab(copySheetName);


最佳答案

查看完整内容

可以参考这个demo

4 个回复

倒序浏览
最佳答案
最佳答案
有点东西悬赏达人认证
初级会员   /  发表于:2022-9-2 15:33:13
来自 4#
ymslx_sjs 发表于 2022-9-3 09:23
原chart是不变更任何样式的,所以才想要复制一个出来,把复制出来的那个变更样式再导出成图片

可以参考这个demo
image.png306383666.png

demo.html.zip

2.21 KB, 下载次数: 49

回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-9-2 17:51:26
2#
本帖最后由 Richard.Ma 于 2022-9-2 17:53 编辑

原因是canvas必须显示在浏览器窗口中时,才能被获取到

其实你也不用复制一个sheet出来,直接就在当前sheet操作就行
  1. let chart=sheet.charts.all()[0];
  2. let chartArea = chart.chartArea();
  3. chartArea.backColor = "red";
  4. chart.chartArea(chartArea);
  5. chart.getHost()[0].querySelector("canvas")
  6. let imgUrl = canvas.toDataURL("image/png");
  7. chartArea = chart.chartArea();
复制代码



回复 使用道具 举报
ymslx_sjs
初级会员   /  发表于:2022-9-3 09:23:45
3#
Richard.Ma 发表于 2022-9-2 17:51
原因是canvas必须显示在浏览器窗口中时,才能被获取到

其实你也不用复制一个sheet出来,直接就在当前she ...

原chart是不变更任何样式的,所以才想要复制一个出来,把复制出来的那个变更样式再导出成图片
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-9-5 09:28:44
5#
本帖最后由 Richard.Ma 于 2022-9-5 09:34 编辑

嗯,如果担心会破坏原有样式的话,楼上提供的新增一个sheet的办法也可以解决问题,但是同样的,也需要setActiveSheet为新复制的sheet,显示出来,获取base64后后再删除这个sheet
上述的两个方案,实际上在显示器窗口中都看不出chart或者sheet被更改的,你可以测试看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部