2

免責聲明:我是Newb。我理解腳本的一點點,但寫這對我來說是一個痛苦,主要是循環和數組,因此以下。替換列中的某些單元格值

我試圖從一個特定的列(在這種情況下H [8])中拉出所有數據,檢查該列中的每個單元格的值,如果它是y,則將其更改爲是;如果是n,則將其更改爲否;如果它是空的,請保持獨立並移動到下一個單元格。

這是我到目前爲止。像往常一樣,我相信我非常接近,但我無法設置活動單元格的值,也看不到我在哪裏搞亂它。在某一點上,我實際上已將列中的值改爲是(,所以在這些情況下感謝取消)。

的實施例:

..... COL-H 
r1... [service] <-- header 
r2... y 
r3... y 
r4... n 
r5... _ <-- empty 
r6... y 

意圖:更改所有的Y是爲是和所有的n對否(跳至空白細胞)。

我到目前爲止已經試過

功能嘗試1

function Thing1() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("mySheet"); 
    var lrow = ss.getLastRow(); 
    var rng = ss.getRange(2, 8, lrow - 1, 1); 
    var data = rng.getValues(); 

    for (var i=0; i < data.length; i++) { 
    if (data[i][0] == "y") { 
     data[i][0] == "Yes"; 
    } 
    } 
} 

功能嘗試2

function Thing2() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("mySheet"); 
    var lrow = ss.getLastRow(); 
    var rng = ss.getRange(2, 8, lrow - 1, 1); 
    var data = rng.getValues(); 

    for (var i=0; i < data.length; i++) { 
    if (data[i][0] == "n") { 
     data.setValue("No"); 
    } else if (data[i][0] == "y") { 
     data.setValue("Yes"); 
    } 
    } 
} 

使用

一旦我DONE在這裏,我想修改該函數,以便我可以定位任何列並將一個值更改爲另一個值(我已經有一個方法,但我需要能夠設置值)。它會這樣:=替換(sheet,col,orig_value,new_value)。我會在下面發佈它。

在此先感謝您的幫助。


完成代碼用於搜索和列內更換

function replace(sheet, col, origV1, newV1, origV2, newV2) { 
    // What is the name of the sheet and numeric value of the column you want to search? 
    var sheet = Browser.inputBox('Enter the target sheet name:'); 
    var col = Browser.inputBox('Enter the numeric value of the column you\'re searching thru'); 

    // Add old and new targets to change (Instance 1): 
    var origV1 = Browser.inputBox('[Instance 1:] What old value do you want to replace?'); 
    var newV1 = Browser.inputBox('[Instance 1:] What new value is replacing the old?'); 

    // Optional - Add old and new targets to change (Instance 2): 
    var origV2 = Browser.inputBox('[Instance 2:] What old value do you want to replace?'); 
    var newV2 = Browser.inputBox('[Instance 2:] What new value is replacing the old?'); 

    // Code to search and replace data within the column 
    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet); 
    var lrow = ss.getLastRow(); 
    var rng = ss.getRange(2, col, lrow - 1, 1); 
    var data = rng.getValues(); 

    for (var i=0; i < data.length; i++) { 
    if (data[i][0] == origV1) { 
     data[i][0] = newV1; 
    } else if (data[i][0] == origV2) { 
     data[i][0] = newV2; 
    } 
    } 
    rng.setValues(data); 
} 

希望這有助於有人在那裏。再次感謝@ScampMichael!

回答

6

名爲data的數組是根據範圍內的值創建的,並且在創建後獨立於電子表格,因此更改數組中的元素不會影響電子表格。您必須修改數組,然後將整個數組放回原來的位置。

for (var i=0; i < data.length; i++) { 
    if (data[i][0] == "n") { 
     data[i][0] = "No"; 
    } else if (data[i][0] == "y") { 
     data[i][0] = "Yes"; 
    } 
    } 
rng.setValues(data); // replace old data with new 
} 
+0

我總是想念小東西哈哈。再次感謝! – Steve

+0

我想我跳過了槍。我添加了該語句並收到錯誤「TypeError:無法在對象中找到函數setValue」。它列出了它所發現的所有當前值,所以它似乎在拉動正確的東西。爲什麼它不'找到對象的setValue函數'? – Steve

+0

你使用setValues包括s嗎? – ScampMichael

相關問題