2017-10-19 48 views
-1

該程序除了獲取一行數據之外完美工作。它總是抓住一個空白集。任何人都能看到我失蹤的東西?複製和粘貼一個愚蠢的行應該很簡單。.getValues()無法正常工作,如果按公式創建的值Google Apps腳本

我需要從編輯的行中抓取D:BA中的數據。接下來,刪除創建數據的公式,然後將保存的數據粘貼回行中,以便我可以對其進行自定義。

function onEdit(e) { 
    if(e.range.columnStart != 1 || 
    e.source.getActiveSheet().getName() != "Loads") 
    /*e.source.getActiveSheet().getName() != "Loads") || 
    e.range.rowStart != 9 || e.range.columnStart != 1 || 
    e.range.rowEnd != 53 || 
    e.range.columnEnd != 1*/ 
    ){ 
    return; 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Loads"); 
    var arr = []; 
    var r = e.range.getRow(); 
    var cell1 = sheet.getRange(r,1); 
    var cell2 = sheet.getRange(r,2); 
    var lastColumn = sheet.getLastColumn(); 
    var row = sheet.getRange(r,4,49,49); 
    var value = e.value; 
    var arr = []; 

    // get cell 2 
    var cell2value = cell2.getValue(); 
    // delete cell 
    cell2.clear(); 
    //paste formula 
    cell2.setFormula('=split(REGEXREPLACE(A'+r+',\",\",\", \"),\",\",true)'); 

    // copy row r,3,1,40 
    //var row2 = sheet.getRange(r,4,1,10); 
    var rowValues = row.getValues(); 

    //push row values to array 
    arr.push(rowValues); 
    // clear e.range 
    cell1.clear(); 
    // delete cell 
    cell2.clear(); 
    // paste cell 
    //cell2.setValue(cell2value); 
    // paste row 
    row.setValues(arr); 
    } 
}; 
+0

第一印象:你確定它一直在運行嗎?你的'if()'條件沒有'else',所以如果它是真的,它會調用'return'並且什麼也不給你,如果條件計算結果爲false,沒有什麼可執行的。 –

回答

0

首先,你的邏輯永遠不會被執行:若您if()條件評估爲trueonEdit(e)執行return &沒有什麼事情發生,否則(當if()評估爲false)沒有其他代碼來執行。你的意思可能是if(!foo){ return; },否則你需要添加一個else子句。此外,如果例如其他'Loads'的任何表單上的單元格A1被編輯,則您的if()條件將評估爲true:我不確定這是您想要的。你可能想在這裏使用邏輯與。

接下來,您只抓取'Loads'工作表中的數據:您從不參考編輯工作表中的行。您可能需要2個工作表物件:一個用於編輯的工作表,您可以通過ss.getActiveSheet() &獲得第二個「裝載」。

當您撥打sheet.getRange()時,您也正在抓取一個49x49的數組,這意味着您的range.getValues()調用也會返回一個49x49的數組值,這不是您的描述所要表達的內容。你的意思是sheet.getRange(r,4,1,49)? (返回1x49陣列。)

arr.push(rowValues)由推你的二維數組rowValues到一個新的數組元素arr[],使得arr[]三維陣列(arr[0]包含49x49陣列rowValues)複雜的問題。如果您需要將rowValues複製到另一個變量,只需指定它:var arr = rowValues;

您是否試圖清除公式表格cell2?如果是這樣,您需要設置一個空的公式,因爲range.clear()會保留公式。

其他一切似乎工作正常,但我不知道你到底想做什麼。我希望這有助於,壽。

+0

我想指出的問題不是缺少'else'子句。你可以使用'if()'而不使用'else'並且運行得很好,問題在於括號所在的位置。我的理解是他想要做一個'if(/ * reasons * /){return}'這是完全正常的,如果你想在條件滿足的情況下終止函數的話。 – Vytautas

+0

謝謝,@Vytautas,你說得對。不知道爲什麼我沒有從這個角度看待它:你對早期的「回報」問題有更好的解釋。我已經更新了我的答案,以包含您的洞察力。 –

+0

謝謝你們,是的if條款似乎運作良好。 – Clayten

相關問題