找回密码
 立即注册

QQ登录

只需一步,快速开始

life()

初级会员

38

主题

131

帖子

417

积分

初级会员

积分
417
life()
初级会员   /  发表于:2023-5-5 16:45  /   查看:3173  /  回复:22
10金币
问题重现步骤

1 / 选择一个比较大的空白区域单元格
image.png336686705.png
2 / 插入图表:饼图
image.png556481933.png
3 / 这时候进行拖拽图表或其他操作,变得非常卡顿,在低配机器上会直接卡死

最佳答案

查看完整内容

可以的,通过重写插入图表这个指令,判断选取的区域是否全为空,如果全为空则提示用户无法插入,请参考以下代码: const container = document.getElementById('gc-designer-container') as HTMLDivElement; let designerConfig = JSON.parse(JSON.stringify(GCD.Spread.Sheets.Designer.DefaultConfig)); let newCommand = GCD.Spread.Sheets.Designer.getCommand( GCD.Spread.Sheets.Designer.C ...

22 个回复

倒序浏览
最佳答案
最佳答案
MillionDream
注册会员   /  发表于:2023-5-5 16:45:23
来自 7#
本帖最后由 Lynn.Dou 于 2023-5-15 14:36 编辑
life() 发表于 2023-5-6 09:41
有办法在插入图表的时候检查到选择的区域是否全是空数据,从而避免这个问题的出现吗?

可以的,通过重写插入图表这个指令,判断选取的区域是否全为空,如果全为空则提示用户无法插入,请参考以下代码:

    const container = document.getElementById('gc-designer-container') as HTMLDivElement;

    let designerConfig = JSON.parse(JSON.stringify(GCD.Spread.Sheets.Designer.DefaultConfig));

    let newCommand = GCD.Spread.Sheets.Designer.getCommand(
        GCD.Spread.Sheets.Designer.CommandNames.InsertChart
    );
    if (newCommand) {
        let oldExecute = newCommand.execute;
        newCommand.execute = function (context: any, propertyName: any, args: any) {
            let activeSheet = context.getWorkbook().getActiveSheet() as GC.Spread.Sheets.Worksheet;
            let sel = activeSheet.getSelections()[0];
            for (let i = sel.row; i < sel.rowCount; i++) {
                for (let j = sel.col; j < sel.colCount; j++) {
                    if (sheet.getCell(i, j).value() !== null) {
                        oldExecute.call(this, context, propertyName, args);
                        return;
                    }
                }
            }
            alert('Could not insert chart, please select a cell with value.');
        };
    }
    designerConfig.commandMap = {};
    designerConfig.commandMap[GCD.Spread.Sheets.Designer.CommandNames.InsertChart] = newCommand;

    let designer = new GCD.Spread.Sheets.Designer.Designer(container, designerConfig);

效果如下:

2.gif566693725.png


-----------------------------------------------------

更新进展:
此问题已在V16.1.0修复,目前官网暂未正式发布,您可以先通过npm升级测试下
回复 使用道具 举报
MillionDream
注册会员   /  发表于:2023-5-5 17:05:08
2#
您是在官网的那个在线表格编辑器里发现这个问题的吗?
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-5-5 18:22:51
3#
您好,
问题已复现,这边调研下具体原因,有进展贴中通知您。
本贴先做保留处理。
回复 使用道具 举报
life()
初级会员   /  发表于:2023-5-5 18:41:10
4#
MillionDream 发表于 2023-5-5 17:05
您是在官网的那个在线表格编辑器里发现这个问题的吗?

是的,在本地项目发现又在官方例子中重现了该问题
回复 使用道具 举报
life()
初级会员   /  发表于:2023-5-5 18:41:24
5#
Lynn.Dou 发表于 2023-5-5 18:22
您好,
问题已复现,这边调研下具体原因,有进展贴中通知您。
本贴先做保留处理。

好的辛苦
回复 使用道具 举报
life()
初级会员   /  发表于:2023-5-6 09:41:58
6#
Lynn.Dou 发表于 2023-5-5 18:22
您好,
问题已复现,这边调研下具体原因,有进展贴中通知您。
本贴先做保留处理。

有办法在插入图表的时候检查到选择的区域是否全是空数据,从而避免这个问题的出现吗?
回复 使用道具 举报
MillionDream
注册会员   /  发表于:2023-5-6 15:48:05
8#
不过以上的代码只能够封住图表那个按钮的行为,图表按钮右边的那些小按钮是没有办法封住的,如果想要对那些小按钮也进行同样的操作的话,可以参考这个博客:

https://gcdn.grapecity.com.cn/showtopic-167581-1-1.html
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-5-6 18:26:37
9#
楼主可先参考上述方案。
回复 使用道具 举报
life()
初级会员   /  发表于:2023-5-8 17:59:39
10#
MillionDream 发表于 2023-5-6 15:48
不过以上的代码只能够封住图表那个按钮的行为,图表按钮右边的那些小按钮是没有办法封住的,如果想要对那些 ...

好用!感谢!
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部