2012-05-10 45 views
2

我有一些麻煩與電子表格:在標題中說,我把一列是基於另一個單元格的值調用自定義腳本的公式,但當我修改這個其他單元格,公式不會更新...這似乎與標準公式,但在我的手機調用我的腳本:式與自定義腳本不會在谷歌電子表格更新

  • 如果我試圖在公式單元格中添加一個空白,結果仍然沒有更新。
  • 如果我清除公式單元格,並重新鍵入公式,它仍然顯示舊值。
  • 如果我將公式單元格複製粘貼到另一個單元格中,則新單元格是最新的。

這裏是我的腳本。如果幾句話:對於給定的「公司」參數,它搜索匹配這個標準的所有行3列單元存儲在一個變量,最後返回(所以返回的最後一個值):

function getLastStatut(company) { 
    var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); 

    var out = "not found"; 
    var row; 
    for(i in values){ 
    row = values[i]; 
    if(row[1]==company){ 
     out = row[2]; 
    } 
    } 
    return out; 
} 

而且例如:

  • A1:日期
  • A2:測試
  • A3:運行
  • A4:= getLastStatut(B1)

所以A4顯示「運行」,但如果我改變A3,它仍然顯示「運行」,而應該顯示A3的價值。

這是一個bug或者是有什麼我做錯了嗎?歡迎任何幫助。

Alexis

回答

5

問題是與自定義函數的緩存「功能」。我在這裏解釋它other thread,請閱讀。

但這裏的底線是,自定義函數不應該訪問也不是一成不變的,所有的變量信息應作爲參數傳遞數據。在你的情況下,整個數據集應該是你的腳本的參數。自定義函數不應該有任何範圍。

//getting values like this is wrong (for a custom function) 
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); 
+0

謝謝Henrique,這是一個遺憾,我沒有找到你給的鏈接。我終於改變了我的函數定義:'function getLastStatus(company,values)',並以此方式調用'= getLastStatut(B19,A:C)',因爲我只需要解析前三列。 – Alexis

+1

有時很難提出一個好的搜索標準。特別是當我們不確定問題是什麼時:) –

相關問題