скрипт google apps как-то не работает, что я делаю не так?

#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 Спасибо, что ответили. Я рад, что ваш вопрос был решен. И тебе тоже спасибо.