找回密码
 立即注册

QQ登录

只需一步,快速开始

jyjc 讲师达人认证
高级会员   /  发表于:2021-7-7 09:30  /   查看:2965  /  回复:4
这种自定义单元格类型不支持拖拽填充!
var spreadNS = GC.Spread.Sheets;
window.onload = function () {
    var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
    var sheet = spread.getActiveSheet()
    sheet.setCellType(1, 1, new FivePointedStarCellType())
};
//Custom Cell Type
function FivePointedStarCellType() {
    this.size = 10;
}
FivePointedStarCellType.prototype = new spreadNS.CellTypes.Base();
FivePointedStarCellType.prototype.paint = function (ctx, value, x, y, w, h, style, context) {
    if (!ctx) {
        return;
    }

    ctx.save();

    // draw inside the cell's boundary
    ctx.rect(x, y, w, h);
    ctx.clip();
    ctx.beginPath();

    if (value) {
        ctx.fillStyle = "orange";
    } else {
        ctx.fillStyle = "gray";
    }

    var size = this.size;
    var dx = x + w / 2;
    var dy = y + h / 2;
    ctx.beginPath();
    var dig = Math.PI / 5 * 4;
    ctx.moveTo(dx + Math.sin(0 * dig) * size, dy + Math.cos(0 * dig) * size);
    for (var i = 1; i < 5; i++) {
        ctx.lineTo(dx + Math.sin(i * dig) * size, dy + Math.cos(i * dig) * size);
    }
    ctx.closePath();
    ctx.fill();

    ctx.restore();
};
FivePointedStarCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
    var xm = cellRect.x + cellRect.width / 2,
        ym = cellRect.y + cellRect.height / 2,
        size = 10;
    var info = { x: x, y: y, row: context.row, col: context.col, cellRect: cellRect, sheetArea: context.sheetArea };
    if (xm - size <= x && x <= xm + size && ym - size <= y && y <= ym + size) {
        info.isReservedLocation = true;
    }
    return info;
};
FivePointedStarCellType.prototype.processMouseUp = function (hitInfo) {
    var sheet = hitInfo.sheet;
    if (sheet && hitInfo.isReservedLocation) {
        var row = hitInfo.row, col = hitInfo.col, sheetArea = hitInfo.sheetArea;
        var newValue = !sheet.getValue(row, col, sheetArea);
        var spread = sheet.getParent();
        spread.commandManager().execute({ cmd: "editCell", sheetName: sheet.name(), row: row, col: col, newValue: newValue });
        return true;
    }
    return false;
};









4 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-7 09:46:42
沙发
本帖最后由 Clark.Pan 于 2021-8-5 11:49 编辑

您没有做自定义特性序列化,所以无法拖拽填充,如下图所示,在指定位置设置上typeName即可。
自定义特性序列化详情参考下面的教程:
https://demo.grapecity.com.cn/sp ... erialization/purejs

typeName 其实可以了解为一个索引,通过typeName的设置方便SpreadJS在反序列化的时候可以找到对应自定义属性的实现。type一般来说是在当前前端作用域下方位到对应自定义方法的路径。拖拽的实现也用了响应的机制。
image.png239644469.png
回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2021-7-7 12:04:42
板凳
Clark.Pan 发表于 2021-7-7 09:46
您没有做自定义特性序列化,所以无法拖拽填充,如下图所示,在指定位置设置上typeName即可。
自定义特性序 ...

具体实现是指这部分吗?针对对应的typeName返回构造函数?
  var oldFun = GC.Spread.Sheets.getTypeFromString;
    // Private types can not be accessed from window, so override getTypeFromString method.
    GC.Spread.Sheets.getTypeFromString = function(typeString) {
        switch (typeString) {
            case "MyFormatter":
                return MyFormatter;
            case "MyRowFilter":
                return MyRowFilter;
            default:
                return oldFun.apply(this, arguments);
        }
    }

回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-7-7 13:43:26
地板
jyjc 发表于 2021-7-7 12:04
具体实现是指这部分吗?针对对应的typeName返回构造函数?
  var oldFun = GC.Spread.Sheets.getTypeFro ...

请参考下面 需要给自定义单元格设置一个typename,当下拉时,如果这个typename与自定义单元格相同,则将这个单元格的类型改为自定义的类型
image.png95561522.png
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-8 11:03:55
5#
jyjc 发表于 2021-7-7 12:04
具体实现是指这部分吗?针对对应的typeName返回构造函数?
  var oldFun = GC.Spread.Sheets.getTypeFro ...

typeName 其实可以了解为一个索引,通过typeName的设置方便SpreadJS在反序列化的时候可以找到对应自定义属性的实现。type一般来说是在当前前端作用域下方位到对应自定义方法的路径。拖拽的实现也用了响应的机制。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部