2015-06-01 24 views
0

我正在寫谷歌腳本中的函數,它似乎是我需要解決的最後一個錯誤是當我調用我的函數時,谷歌表中的參考不存在錯誤。我不知道該怎麼做,因爲它似乎不是我的代碼的問題。有誰知道如何幫助?引用不存在錯誤谷歌腳本

謝謝你的幫助!

這就是我現在的代碼。它不完整,因爲我需要將其更改爲用戶輸入,但這是一個測試。

在一個谷歌的片材細胞I型在= sortingtesting()

function sortingtesting() 
{ 
    var pInfo1 = ['a','b','c','d','e','f','g','h','i','j','k','l','m','o','p','q','r','s'] 
    var pInfo2 = ['a','b','c','d','e','f','g','h','i','j','k','l','m','o','p','q','r','s'] 
    var pInfo3 = ['a','b','c','d','e','f','g','h','i','j','k','l','m','o','p','q','r','s'] 
    var pWO = ['1','','','2','','','3','4','5','6','7','','','8','','','9','10'] 
    var pSearch = ['c', 'b', 'a'] 

    var WO = []; 
    var Info1 = []; 
    var Info2 = []; 
    var Info3 = []; 
    var Search = []; 

    for(var i = 0; i < 18; i++) 
    WO[i] = pWO[i]; 

    for(var i = 0; i < 18; i++) 
    { 
     Info1[i] = pInfo1[i]; 
    } 

    for(var i = 0; i < 18; i++) 
    { 
     Info2[i] = pInfo2[i]; 
    } 

    for(var i = 0; i < 18; i++) 
    { 
     Info3[i] = pInfo3[i]; 
    } 

    for(var i = 0; i < 1; i++) 
    Search[i] = pSearch[i]; 

    // Declares secondary storage arrays and their counters 
    var FinalArray1 = []; 
    var FinalArray2 = []; 
    var FinalArray3 = []; 
    var LastArray = []; 
    var a = 0; 
    var b = 0; 
    var c = 0; 
    var d = 0; 

    // loop to run and make all of the cells in the work order row relevant to the work order number 
    for(var row = 0; row < WO.length; row ++) 
    { 
    var counter = row - 1; 
    while(WO[row] == "") 
    { 
     WO[row] = WO[counter]; 
     counter--; 
    } 
    } 

    // loop that goes through saving which work orders meet certain search criteria, each search criteria has its own separate secondary array 

    for(var row = 0; row < Info1.length; row++) 
    { 
     if(Info1[row] == Search[0]) 
     { 
     FinalArray1[a] = WO[row]; 
     a++; 
     } 
    } 



    for(var row = 0; row < Info1.length; row++) 
    { 
     if(Info2[row] == Search[1]) 
     { 
     FinalArray2[b] = WO[row]; 
     b++; 
     } 
    } 



    for(var row = 0; row < Info1.length; row++) 
    { 
     if(Info3[row] == Search[2]) 
     { 
     FinalArray3[c] = WO[row]; 
     c++; 
     } 
    } 


    // loop to run through and get all the work orders that meet all of the criteria 
    for(var i = 0; i < FinalArray1.length; i++) 
    { 
    for(var j = 0; j < FinalArray2.length; j++) 
    { 
     for(var k = 0; k < FinalArray3.length; k++) 
     { 
     if(FinalArray3[k] == FinalArray2[j] && FinalArray2[j] == FinalArray1[i]) 
     { 
      LastArray[d] = FinalArray1[i]; 
      d++; 
     } 
     } 
    } 
    } 

    return LastArray; 
} 

溶液中發現的: 這與谷歌片來作爲參數陣列我的工作的代碼和我只是認爲這將是很好將工作原型放在那裏:

function sortingtesting(WO, Info, Search) 
{ 
    // Declares secondary storage arrays and their counters 
    var FinalArray1 = []; 
    var FinalArray2 = []; 
    var FinalArray3 = []; 
    var LastArray = []; 
    var a = 0; 
    var b = 0; 
    var c = 0; 
    var d = 0; 

    // loop to run and make all of the cells in the work order row relevant to the work order number instead of being blank 
    for(var row = 0; row < WO.length; row ++) 
    { 
    var counter = row - 1; 
    while(WO[row] == "") 
    { 
     WO[row] = WO[counter]; 
     counter--; 
    } 
    } 

    // loop that goes through saving which work orders meet certain search criteria, each search criteria has its own separate secondary array to store the work orders that meet the criteria 
    for(var col = 0; col < Info[0].length; col++) 
    { 
    for(var row = 0; row < Info.length; row++) 
    { 
     if(Info[row][col] == Search[0]) 
     { 
     FinalArray1[a] = WO[row]; 
     a++; 
     } 
     else if(Info[row][col] == Search[1]) 
     { 
     FinalArray2[b] = WO[row]; 
     b++; 
     } 
     else if(Info[row][col] == Search[2]) 
     { 
     FinalArray3[c] = WO[row]; 
     c++; 
     } 
    } 
    } 

    LastArray[0] = 'N/A'; 

    // loop to run through and get all the work orders that meet all of the criteria 
    for(var i = 0; i < FinalArray1.length; i++) 
    { 
    for(var j = 0; j < FinalArray2.length; j++) 
    { 
     for(var k = 0; k < FinalArray3.length; k++) 
     { 
     if(FinalArray3[k] == FinalArray2[j] && FinalArray2[j] == FinalArray1[i]) 
     { 
      LastArray[d] = FinalArray1[i]; 
      d++; 
     } 
     } 
    } 
    } 

    return LastArray; 
} 
+1

你能設置一個斷點並確定實際上失敗的那一行嗎? –

+0

當它這樣設置時,它沒有失敗的一行,但是當谷歌工作表調用函數時它說有一個引用錯誤 – Michaels

回答

0

TL; DR該函數不應該返回一個空數組。

通過將return "a valid string";在腳本中的不同位置(平分的代碼),你會看到回報LastArray;`導致錯誤。

通過在調試器中運行代碼,LastArray是一個空數組。

根據實驗,空數組對於在公式中調用的函數不是有效的返回值,也不是包含多個值的數組。包含一個整數的數組是有效的。

var LastArray = [];更改爲var LastArray = [1];表明了這一點。

+2

這很好。我仍然使用'Return LastArray',但是我將LastArray [0]設置爲N/A,這樣,如果沒有任何匹配來填充數組,它將僅保留在N/A而不是一個空數組。我將發佈當前工作的代碼作爲編輯。 – Michaels