0

只要我不關閉電子表格,我在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

我似乎已經解決了這個問題。

我意識到,如果我的電子表格中幾乎沒有電話,它就會很愉快地工作。超過兩三個,它會開始嚇壞了。

由於一個非常簡單的解決方案,我似乎回到了行動中;我在陣列處理包裝中加入了一個短暫的睡眠...

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; 
}