2

Отказ от ответственности: Я - Newb. Я немного разбираюсь в написании сценариев, но писать это боль для меня, в основном с циклами и массивами, и, следовательно, следующее.Заменить значения определенных ячеек в колонке

Я пытаюсь вытащить все данные из определенного столбца (в данном случае H [8]), проверить значение каждой ячейки в этом столбце и, если это y, изменить его на Да; если это n, измените его на No; если он пуст, оставьте его в покое и перейдите в следующую ячейку.

Вот что у меня есть. Как обычно, я считаю, что я довольно близко, но я не могу установить значение активной ячейки, и я не вижу, где я это испортил. В какой-то момент я фактически изменил значение Да в колонке (так благодарен за отмену в этих случаях).

Пример листа:

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

Намерение: Изменить все у это значение Да и все п, чтобы Нет (пропустить пустые ячейки).

То, что я пытался до сих пор:

Функция попытка 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"); 
    } 
    } 
} 

Использование:

После того, как я сделанный здесь я хочу изменить функцию, чтобы я мог настроить таргетинг на любой столбец и изменить одно значение на другое (у меня уже есть метод для этого, но мне нужно установить значение). Это было бы так: = replace (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

Мне всегда не хватает мелочи lol. Еще раз спасибо! – Steve

+0

Думаю, я прыгнул с пистолета. Я добавил этот оператор и получил ошибку «TypeError: Не могу найти функцию setValue в объекте». Он перечислял все текущие значения, которые он нашел, поэтому, похоже, он тянет нужные вещи. Почему бы ему не «найти функцию setValue в объекте»? – Steve

+0

Вы использовали setValues, включая s? – ScampMichael

Смежные вопросы