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

相关问题