我在Google表格单元格中有一个公式,只要我不关闭电子表格,效果很好。如果我这样做,当我再次打开它时,细胞会永远说“正在加载......”。
这是公式,在单元格H1中:
=ARRAYFORMULA(if( A1:A1000 = "", "", strArrayHash(G1:G1000)))
我也尝试过,并采用相同的行为:
=if( A1 = "", "", strHash(G1))
=if( A2 = "", "", strHash(G2))
=if( A3 = "", "", strHash(G3))
A列包含主键。如果数组公式没有找到PK,那么它应该只写一个零长度的字符串。
单元格G1连接A到F列:
=ARRAYFORMULA(if( A1:A1000 = "", "", (A1:A1000 & B1:B1000 & C1:C1000 & D1:D1000 & E1:E1000 & F1:F1000)))
我的用户定义公式 strArrayHash 在我第一次使用它时非常简单且非常快:
function strHash(valCell) {
var hash = 0;
if (valCell.length == 0) return hash;
for (i = 0; i < valCell.length; i++) {
char = valCell.charCodeAt(i);
hash = ((hash<<5)-hash)+char;
hash = hash & hash; // Convert to 32bit integer
}
return hash;
}
function strArrayHash(range) {
var ret = new Array();
var str = "";
for (item in range) {
str = range[item].toString();
if (str.length > 0) {
ret[item] = strHash(str);
} else {
ret[item] = "";
}
};
return ret;
}
我找到解决问题的唯一方法是手动进入并以某种方式编辑公式。
我以为我通过添加睡眠状态来实现它...
if (str.length > 0) {
ret[item] = strHash(str);
Utilities.sleep(10); // circumvent undocumented execution limit
} else {
...但它仅适用于添加睡眠状态的用户。共享访问用户仅看到“正在加载...”,即使最后一个要编辑的用户正在查看计算的哈希值。
任何人都可以在电子表格关闭时提出停止工作的原因吗?我该怎么办呢。
答案 0 :(得分:0)
我似乎已经解决了这个问题。
我意识到,如果我的电子表格中只有很少的电话,那就很愉快。超过两三个,它会开始吓坏。
由于一个非常简单的解决方案,我似乎又回来了;我在数组处理包装器中添加了一个简短的睡眠...
function strArrayHash(range) {
var ret = new Array();
var str = "";
for (item in range) {
str = range[item].toString();
if (str.length > 0) {
ret[item] = strHash(str);
Utilities.sleep(10); // circumvent undocumented execution limit
} else {
ret[item] = "";
}
};
return ret;
}