Google apps script GAS-脚本执行时间过长/变通方法?

Google apps script GAS-脚本执行时间过长/变通方法?,google-apps-script,Google Apps Script,我有一个脚本需要5分钟以上才能执行。因此,它将在5分钟后中止,并显示执行时间过长的信息 现在我正在寻找一个解决方案来处理这个问题。在下面的示例中,我想在var=I达到300时中断,然后继续I=301。这是解决方案的一个选项吗?如果是的话,如何调整代码 var xy = 1100; for (var = i; i<= xy; i++){ { do_some_stuff(); } } var xy=1100; 对于(VaR=I;IIGHT我推荐这个解决方案?-您好!看来您的问题是代码本身。考

我有一个脚本需要5分钟以上才能执行。因此,它将在5分钟后中止,并显示执行时间过长的信息

现在我正在寻找一个解决方案来处理这个问题。在下面的示例中,我想在
var=I
达到300时中断,然后继续
I=301
。这是解决方案的一个选项吗?如果是的话,如何调整代码

var xy = 1100;
for (var = i; i<= xy; i++){
{
do_some_stuff();
}
}
var xy=1100;

对于(VaR=I;IIGHT我推荐这个解决方案?-您好!看来您的问题是代码本身。考虑优化代码以避免重复,并使用多个函数来避免应用程序脚本中每个功能限制的30秒。此外,如果您想操纵大量数据,最好单独使用。n这只会将完成的结果上传到工作表中。是的,你是对的。同时,我学会了如何优化代码并将变量保存在数组中。现在只需几秒钟。
    function Create_geodata()
 {

  var Geodata = getSheetById(1702838837);
  var Geojson_Data = getSheetById(1515926044);
  var Control_Panel = getSheetById(1102907697);

  Geodata.getRange('I4').setValue('Yes');

  var Hyperlink_Geodata = Control_Panel.getRange('O18').getValue();
  var document_missing_ID = Control_Panel.getRange('O24').getValue();
  var Umap_Hyperlink = Control_Panel.getRange('L20').getValue();
  var umap_zoom = Control_Panel.getRange('N22').getValue();
  var Own_ID_Sort_Setting = Control_Panel.getRange('O30').getValue();
  var Own_ID_Sort = Control_Panel.getRange('M32').getValue();
  var Threshold_Altitude = Control_Panel.getRange('N28').getValue();
  var Automatic_Altitude_Removal = Control_Panel.getRange('O26').getValue();

  var Cat_A = Control_Panel.getRange('C36').getValue();
  var Cat_B = Control_Panel.getRange('C38').getValue();
  var Cat_C = Control_Panel.getRange('C40').getValue();

  RESET_Geodata(); //Clear data before proceed

  if (Own_ID_Sort_Setting)
  {standard_sort_column = Own_ID_Sort}
  else
  {standard_sort_column = "name"}


  var data = Geojson_Data.getDataRange().getValues();
  var col1 = data[0].indexOf(standard_sort_column) + 1;
  var col2 = data[0].indexOf('coordinates') + 1;
  var col3 = data[0].indexOf('name') + 1;
  var col4 = data[0].indexOf('description') + 1;

  var col1_Char = columnToLetter(col1); //last row of column where sort-criteria is located
  var col2_Char = columnToLetter(col2);
  var col3_Char = columnToLetter(col3);
  var col4_Char = columnToLetter(col4);
  var lastrow_col1 = Geojson_Data.getRange(col1_Char + ':' + col1_Char).getValues();
  lastrow_col1 = lastrow_col1.filter(String).length;

  var lastrow = Geojson_Data.getLastRow();//last row of complete sheet
  var lc = Geojson_Data.getLastColumn(); //last column
  var lc_Char = columnToLetter(lc);

  var dc = 0;
  Geojson_Data.getRange('N1').setValue(col1);


  if (!document_missing_ID)

  {
   for(var t = 2; t <= lastrow; t++)
   {

   if (Geojson_Data.getRange(t,col1).getValue() == "")
   {
    Geojson_Data.deleteRow(t);

   }
   }  
   }

  else
  {
     for(var t = 2; t <= lastrow; t++)
   {

   if (Geojson_Data.getRange(t,col1).getValue() == "")
   {
    dc++;
    var formattedNumber = ("000" + dc).slice(-4);
    Geojson_Data.getRange(t,col1).setValue('ZZ_' + formattedNumber);

   }
   }
  }

   Geojson_Data.getRange('A2:' + lc_Char + lastrow).sort(col1);

   Geojson_Data.getRange(col1_Char + 2 + ':' + col1_Char + lastrow).copyTo(Geodata.getRange('A3:A' + lastrow),{contentsOnly: true});
   Geojson_Data.getRange(col2_Char + 2 + ':' + col2_Char + lastrow).copyTo(Geodata.getRange('F3:F' + lastrow),{contentsOnly: true});
   Geojson_Data.getRange(col3_Char + 2 + ':' + col3_Char + lastrow).copyTo(Geodata.getRange('B3:B' + lastrow),{contentsOnly: true});
   Geojson_Data.getRange(col4_Char + 2 + ':' + col4_Char + lastrow).copyTo(Geodata.getRange('D3:D' + lastrow),{contentsOnly: true});

  var geodata_sorted = '';
  var route_length = 0;

   for(var i = 3; i <= lastrow +1; i++)
   {
   var pr = 0;
   var fl = false;
   var distance_neighbour_points = 0;
   var Ar = Geodata.getRange('F' + i).getValue();
   Ar = Ar.split(',');
   var Ar_Anz = Ar.length - 1;
   for(var b = 0; b <= Ar_Anz; b=b+2)
   {
   if ((Ar_Anz - b) != 0)
   {
   var E_Lat = Ar[b];
   var E_Lon = Ar[b + 1];
   if (fl)
   {
   var A_Lat = Ar[b - 2];
   var A_Lon = Ar[b - 1];

   distance_neighbour_points = distVincenty(A_Lat, A_Lon, E_Lat, E_Lon);

   if (Automatic_Altitude_Removal && (distance_neighbour_points > Threshold_Altitude))
   {
     b++;
     E_Lat = Ar[b];
     E_Lon = Ar[b + 1];
     A_Lat = Ar[b - 3];
     A_Lon = Ar[b - 2];
   }

    route_length = route_length + distVincenty(A_Lat, A_Lon, E_Lat, E_Lon);
   }
   pr++;
   fl = true;
   }
   geodata_sorted = geodata_sorted + E_Lat + ',' + E_Lon;
   if ((Ar_Anz - b) < 2)
   {
   }
   else
   {
   geodata_sorted = geodata_sorted + ',';
   }
     if ((Ar_Anz - b) < 2)
   {
   pr = parseInt(pr / 2) * 2 + 1;
   var Ay = geodata_sorted.split(',');
   var Geo_Mitte_Lon = Ay[pr - 1];
   var Geo_Mitte_Lat = Ay[pr];
   var googlemaps = 'https://maps.google.com/?q=' + Geo_Mitte_Lat + ',' + Geo_Mitte_Lon;
   var umap = 'https://umap.openstreetmap.fr/de' + '/map/' + Umap_Hyperlink + '#' + umap_zoom + '/' + Geo_Mitte_Lat + '/' + Geo_Mitte_Lon;
   Geodata.getRange(i, 3).setValue(route_length / 1000);
   Geodata.getRange(i, 6).setValue(geodata_sorted);
   Geodata.getRange(i, 7).setValue(googlemaps);
   Geodata.getRange(i, 8).setValue(umap);  

   //Verlinkung
   if (Hyperlink_Geodata)
   {
   var displayName1 = Geodata.getRange(i,1).getValue();
   var displayName2 = Geodata.getRange(i,2).getValue();
   Geodata.getRange(i,1).setFormula('=HYPERLINK(\"' + googlemaps + '\";\"' + displayName1 + '\")');
   Geodata.getRange(i,2).setFormula('=HYPERLINK(\"' + umap + '\";\"' + displayName2 + '\")');
   }

   geodata_sorted = '';
   route_length = 0;
   } 
   }

   //Set categories Cat_A,B,C...
   var description_content = Geodata.getRange(i,4).getValue();

   var regExpA = new RegExp('/*' + Cat_A, 'gi');
   var regExpB = new RegExp('/*' + Cat_B, 'gi');
   var regExpC = new RegExp('/*' + Cat_C, 'gi');

   var compareA = regExpA(description_content);
   var compareB = regExpB(description_content);
   var compareC = regExpC(description_content);

   if (compareC == Cat_C) Geodata.getRange(i,5).setValue(Cat_C);
   if (compareB == Cat_B) Geodata.getRange(i,5).setValue(Cat_B);
   if (compareA == Cat_A) Geodata.getRange(i,5).setValue(Cat_A);

   }

    SpreadsheetApp.getActiveSpreadsheet().setActiveSheet(Geodata);

  Geodata.getRange('I4').setValue('No');
  }