#javascript #google-apps-script #google-sheets
Вопрос:
как-то .getRange не работает ?? работает так же в любом другом сценарии, почему бы не здесь ? Журнал прилагается…
Ошибка в строке
**
«вар дней srcSheet.getRange(«F» i);»
**
function Test() {
var sSheet = SpreadsheetApp.getActiveSpreadsheet();
var srcSheet = sSheet.getSheetByName("Refinery");
var lastRow = srcSheet.getLastRow();
for(var i = 0; i <= lastRow; i ) {
var days = srcSheet.getRange("F" i);
var day = days.getValue();
var hours = srcSheet.getRange("G" i)
var hour = hours.getValue();
var cells = srcSheet.getRange("E" i);
if((day != "")||(day != null)amp;amp;(hour != "")||(hour != null)amp;amp;(cells == "-"))
{
//Datum berechnen
var neudate = new Date()
var Btag = 1000*60*60*24*day
var Bstd = 1000*60*60*hour
var DATUM = (new Date(neudate.getTime() Btag Bstd) )
DATUM = Utilities.formatDate(DATUM, "GMT 2", "dd.MM.yyyy HH:mm:ss")
cells.setValue(DATUM);
}
}
}
Ответ №1:
Точки изменения:
- В случае метода
getRange(a1Notation)
начальный номер A1Notation равен1
. Но в вашем сценарии 1-е число таково0
. Я думаю, что в этом причина вашей проблемы. - В вашем сценарии
getValue
иsetValue
используются в цикле. В этом случае стоимость процесса написания скрипта становится высокой. Ссылка
Измененный сценарий 1:
В этом изменении изменяется ваш сценарий. В этом случае, пожалуйста, измените свой сценарий следующим образом.
От:
for(var i = 0; i <= lastRow; i ) {
Для:
for(var i = 1; i <= lastRow; i ) {
Измененный сценарий 2:
В этой модификации ваш сценарий изменяется за счет снижения стоимости процесса. В этом случае, пожалуйста, измените свой сценарий следующим образом.
function Test() {
var sSheet = SpreadsheetApp.getActiveSpreadsheet();
var srcSheet = sSheet.getSheetByName("Refinery");
var lastRow = srcSheet.getLastRow();
var range = srcSheet.getRange("E1:G" lastRow);
var values = range.getValues().map(([cells, day, hour]) => {
if ((day != "") || (day != null) amp;amp; (hour != "") || (hour != null) amp;amp; (cells == "-")) {
var neudate = new Date();
var Btag = 1000 * 60 * 60 * 24 * day
var Bstd = 1000 * 60 * 60 * hour
var DATUM = (new Date(neudate.getTime() Btag Bstd))
DATUM = Utilities.formatDate(DATUM, "GMT 2", "dd.MM.yyyy HH:mm:ss")
return [DATUM];
}
return [cells]
});
range.offset(0, 0, values.length, 1).setValues(values);
}
Рекомендации:
Комментарии:
1. @TheFireFox Спасибо, что ответили. Я рад, что ваш вопрос был решен. И тебе тоже спасибо.