找回密码
 立即注册

QQ登录

只需一步,快速开始

Lynn.Dou 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-14 09:51  /   查看:2922  /  回复:0
我们知道,SpreadJS支持给工作簿添加背景图,也支持给某一个单元格设置背景图。
有小伙伴有这样的需求:给一片单元格区域设置背景图,
这该如何实现呢?

方案1:将这片单元格区域设置合并单元格,然后给这个合并单元格设置背景图。
  1. sheet.getCell(0,0).backgroundImage("https://gcdn.grapecity.com.cn/uc_server/avatar.php?uid=52354&size=middle")
复制代码


方案二:通过自定义单元格实现
创建自定义单元格类型
  1. function WaterMarkCellType() {
  2.             this.typeName = "WaterMarkCellType"
  3.         }
  4.         WaterMarkCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
  5.         WaterMarkCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
  6.             //Paints a cell on the canvas.
  7.             var background = style.backgroundImage;
  8.             style.backgroundImage = undefined;
  9.             GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments)
  10.             GC.Spread.Sheets.CellTypes.Text.prototype.paint.call(this, ctx, undefined, x, y, w+100, h+100, {backgroundImage:background}, options)
  11.         };
复制代码
给单元格区域的左上角单元格设置此单元格类型,背景图片由此绘制。
  1. var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
  2.             var sheet = spread.getActiveSheet();
  3.             sheet.getCell(3, 3).cellType(new WaterMarkCellType()).backgroundImage('https://www.grapecity.com.cn/images/metalsmith/home/logo_spjs.png')

  4.             sheet.setArray(2, 2, [[1,2,3,4,5,6,],[1,2,3,4,5,6,],[1,2,3,4,5,6,],[1,2,3,4,5,6,],[1,2,3,4,5,6,],[1,2,3,4,5,6,]])
复制代码
解决滑动滚动条时,图片未完全绘制的问题。
(原因:
由于Demo中是把单个单元格中的背景图进行了放大绘制,
而当滚动条滚动到目标单元格下方时,目标单元格并未被绘制,此时就会出现问题。
解决办法是添加滚动条事件,在事件中注册setTimeout,将sheet重绘即可。
setTimeout时间应控制在不影响视觉效果的情况下尽量长一些。)
  1. var setTimeoutId = null;
  2.             sheet.bind(GC.Spread.Sheets.Events.TopRowChanged, function (s, e) {
  3.                 clearTimeout(setTimeoutId);
  4.                 // 这里的间隔时间,在不影响视觉效果的情况下尽可能长一点
  5.                 setTimeoutId = setTimeout(function(){
  6.                     e.sheet.repaint();
  7.                 }, 50);
  8.             });
复制代码


最终效果如下图:
image.png149611510.png

完整代码请参考附件demo

printBackground.html

3.8 KB, 下载次数: 76

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部