找回密码
 立即注册

QQ登录

只需一步,快速开始

rex_chujie
金牌服务用户   /  发表于:2020-8-26 14:24  /   查看:2346  /  回复:5
设置区域公式后,就不允许右击删除一行数据了

5 个回复

倒序浏览
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-8-26 15:41:07
推荐
您好,请问您说的区域公式是指数组公式吗?

使用数组公式具有以下限制:
1、数组公式不支持包含合并单元格的范围(range)。
2、当公式所在单元格属于一个范围(range)时,不允许修改。
3、剪切和复制适用于整个范围(range)。
4、无法在范围(range)的一部分中插入或删除列和行。

您可以参考这篇文章
https://gcdn.grapecity.com.cn/showtopic-54425-1-1.html

如果不是麻烦您提供能复现问题的demo
回复 使用道具 举报
rex_chujie
金牌服务用户   /  发表于:2020-8-26 16:31:34
板凳
用的setArrayFormula  的方法
// 门店/部门编码列加公式
    sheet1.setArrayFormula(startRow, 0, endRow-startRow, 1, '=IFERROR(INDEX(门店清单!A:B,MATCH(B' + (startRow+1) + ':B' + (endRow+1) + ',门店清单!B:B,0),1),"")');
    // S-AF列加公式
    let yearCol = 'S';
    let price = 'F';
    let strFormula = '';
    //S列=前面12列的和
    for (var i = 1; i <= 12; i++){
        let col = Convert26(ConvertNum(yearCol) - i);
        if (i==12){
            strFormula += col + (startRow+1) + ':' + col + (endRow+1);
        }else{
            strFormula += col + (startRow+1) + ':' + col + (endRow+1) + '+';
        }
    }
    sheet1.setArrayFormula(startRow, ConvertNum(yearCol)-1, endRow-startRow, 1, 'IFERROR(IF('+ strFormula + '=0,"",' + strFormula + '),"")');  
    // T-AF等于单价乘以对应的数量/面积
    for (var i = 1; i <= 13; i++){
        let col = Convert26(ConvertNum(yearCol) + i - 13);
        let strFormula = col + (startRow+1) + ':' + col + (endRow+1) + '*' + price + (startRow+1) + ':' + price + (endRow+1);
        sheet1.setArrayFormula(startRow, ConvertNum(yearCol)-1+i, endRow-startRow, 1, 'IFERROR(IF('+ strFormula + '=0,"",' + strFormula + '),"")');  
    }
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-8-26 18:44:29
地板
rex_chujie 发表于 2020-8-26 16:31
用的setArrayFormula  的方法
// 门店/部门编码列加公式
    sheet1.setArrayFormula(startRow, 0, endRo ...

您好,数组公式是不支持对范围中的一部分插入或删除的,这是产品的设计。

数组有维度和尺寸,不能单独修改、删除、移动某一部分单元格。

因此不允许插入新的单元格或删除单元格。
回复 使用道具 举报
rex_chujie
金牌服务用户   /  发表于:2020-8-26 18:48:22
5#
那请问有没有别的方案可以代替这个setArrayFormula方法设置公式,使用一行一行的设置公式是可以避免这个的,但是速度有点慢
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-8-26 19:11:53
6#
rex_chujie 发表于 2020-8-26 18:48
那请问有没有别的方案可以代替这个setArrayFormula方法设置公式,使用一行一行的设置公式是可以避免这个的 ...

数组公式在您设置好后是无法在范围(range)的一部分中插入或删除列和行。

如果您没有删除的需求就可以用数组公式

一行一行您觉得慢可以在设置公式前调用spread.suspendPaint();挂起绘制,设置后再调用 spread.resumePaint();恢复绘制。

关于绘制您可以参考这个
https://demo.grapecity.com.cn/sp ... ook/painting/purejs
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部