Я считаю, что ваша цель следующая.
- У вас есть лист со значениями в столбцах от «A» до «K». А столбцы от «I» до «K» имеют формулы.
- Вы хотите получить номера последней строки в диапазоне «A: H».
Для этого как насчет этого ответа? В этом ответе я готовлю функцию для получения последней нужной вам строки.
Измененный скрипт:
Добавьте следующую функцию. Эта функция возвращает значения lastRow
путем ввода объекта листа.
function getLastRow(sheet) {
const values = sheet.getRange("A1:H" + sheet.getLastRow()).getDisplayValues();
let lastRow = 0;
for (let r = values.length - 1; r >= 0 ; r--) {
if (!lastRow && !values[r].every(e => e == "")) {
lastRow = r + 1;
break
}
}
return lastRow;
}
И, чтобы использовать указанную выше функцию в вашем скрипте, измените следующее.
From:
var lastRow = target.getLastRow();
To :
var lastRow = getLastRow(target);
- Таким образом,
lastRow
может быть получено в диапазоне "A: H".
Ссылка:
Добавлено 1:
По поводу еще одной модификации, пожалуйста, протестируйте следующую модификацию. В вашем текущем скрипте lastRow
, полученный getLastRow(target)
, не используется, а values
добавляется к последней строке листа appendRow
. Поэтому, чтобы использовать lastRow
, измените следующее. В этом случае в обновленном вопросе измените getRange("A1:H" + sheet.getLastRow())
на getRange("A1:F" + sheet.getLastRow())
для функции getLastRow
.
От:
var lastRow = getLastRow(target);
var lastCol = target.getLastColumn();
values.unshift("SOP"); //Append "SOP" to column A
target.appendRow(values); // Append new row
Кому:
var lastRow = getLastRow(target);
var lastCol = target.getLastColumn();
values.unshift("SOP");
target.getRange(lastRow + 1, 1, 1, values.length).setValues([values]); // Modified
Добавлено 2:
- У вас есть лист со значениями в столбцах от «A» до «K». А столбцы от «I» до «K» имеют формулы.
- Вы хотите получить номера последней строки в диапазоне «A: H».
- А также , вы хотите скопировать формулы столбцов «I» в «K» в ту же строку, в которой помещаются значения.
Для этого измените сценарий следующим образом. В этом случае используйте getLastRow()
.
От:
var lastRow = getLastRow(target);
var lastCol = target.getLastColumn();
values.unshift("SOP"); //Append "SOP" to column A
target.appendRow(values); // Append new row
Кому:
var lastRow = getLastRow(target);
var lastCol = target.getLastColumn();
values.unshift("SOP");
target.getRange(lastRow + 1, 1, 1, values.length).setValues([values]); // Modified
if (lastRow >= 3) target.getRange(lastRow, 9, 1, 3).copyTo(target.getRange(lastRow + 1, 9, 1, 3), SpreadsheetApp.CopyPasteType.PASTE_FORMULA); // Added
- В этом случае, по крайней мере, требуется, чтобы в строке 3 были формулы в столбцах от «I» до «K».
- Если в строке 3 наверняка есть формулы в столбцах от «I» до «K», я думаю, что вы также можно использовать
if (lastRow >= 3) target.getRange(3, 9, 1, 3).copyTo(target.getRange(lastRow + 1, 9, 1, 3), SpreadsheetApp.CopyPasteType.PASTE_FORMULA);
.