Как найти последнюю строку в Google Sheet с getRange - PullRequest
0 голосов
/ 03 ноября 2018

Я использую следующий скрипт для поиска и замены текста. Единственная проблема в строке:

var range = sheet.getRange("D2:D2000");

Он создает новые строки после моей последней строки, так как он установлен на 2000. Мне нужно найти последнюю строку и затем изменить эту строку кода. Я потерян :(

Мой общий сценарий выглядит следующим образом:

function runReplaceInSheet() {

var spreadsheet = SpreadsheetApp.openById("1NK-pmvrJoSqKSgx2zRCAcRKGjk8SiiSsfwwerhfdM1SE"); // UPDATE ID
var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);     // UPDATE number in square brackets


var range = sheet.getRange("D2:D2000");


//  get the current data range values as an array
//  Lesser calls to access the sheet, lower overhead 
var startRow = 2; // First row of data to process
var numRows = 2; // UPDATE number of rows to process
// Fetch the range of cells 
var dataRange = sheet.getRange(startRow, 4, numRows, 1) // Numbers of rows to process
    // Fetch values for each row in the Range
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var v = row[3]; // edit: don't need this
    var values = range.getValues();  

    // Replace Names

    replaceInSheet(values, '1', 'Active');
    replaceInSheet(values, '0', 'Inctive');

    //write the updated values to the sheet, again less call;less overhead
    range.setValues(values);        
}
}

function replaceInSheet(values, to_replace, replace_with) {

//loop over the rows in the array
for (var row in values) {

    //use Array.map to execute a replace call on each of the cells in the row.
    var replaced_values = values[row].map(function(original_value) {
        return original_value.toString().replace(to_replace, replace_with);
    });

    //replace the original row values with the replaced values
    values[row] = replaced_values;


}
}

1 Ответ

0 голосов
/ 04 ноября 2018

Вы можете использовать sheet.getDataRange(), чтобы вернуть диапазон, который описывает область листа с некоторыми данными в нем.

Если вам нужен столбец D2: d, вы можете сделать это

var range = sheet.getDataRange();
range = range.offset (1,3,range.getNumRows()-1,1);

Или вы можете получить данные в одномерный массив, как этот

var values = sheet.getDataRange().getValues().slice(1)
.map (function (d) {
    return d[3];
});

Есть много способов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...