Mon script expire, je suppose parce qu'il dépasse la limite de 6 minutes. Est-ce que quelqu'un a une idée de comment je peux l'optimiser pour qu'il fonctionne plus vite ?

Le but de ce script est de copier toutes les données d'une feuille à une autre, puis de remplir quelques formules sur la feuille de destination.

La quantité de données copiées est assez importante (20 000 lignes et colonnes vers R) mais je ne pense pas que ce soit tellement qu'elle devrait expirer ? Je suis très nouveau dans ce domaine, donc tout conseil est apprécié!

Voici le script:

function copyPasteTo2ndSheet()
{
  var copyURL = 'ThisIsTheOriginSheetURL';
  var pasteURL = 'ThisIsTheDestinationSheetURL';

  var ssCopy = SpreadsheetApp.openByUrl(copyURL);
  var ssPaste = SpreadsheetApp.openByUrl(pasteURL);

  var copySheet = ssCopy.getSheetByName('Orders');
  var pasteSheet = ssPaste.getSheetByName('Orders');
  var lr = copySheet.getLastRow();
  var copyData = copySheet.getRange('A2:R'+lr).getDisplayValues(); 
  var pasteLr = pasteSheet.getLastRow();
  pasteSheet.getRange('A2:R'+pasteLr).clear();
  pasteSheet.getRange('A2:R'+lr).setValues(copyData);

  copyPasteFormula(pasteSheet)
}

function copyPasteFormula(sheet)
{
  var formulas = sheet.getRange(2, 1, 1, sheet.getLastColumn()).getFormulas()[0];
  var lr = sheet.getLastRow();
  for(var i in formulas)
  {
    var formula = formulas[i];
    if(formula !== '')
    {
      var j = parseInt(i)+1;
      sheet.getRange(3, j, lr, 1).setFormula(formula);
    }
  }
}
0
jjw 23 janv. 2020 à 01:27

1 réponse

Meilleure réponse

D'après l'expérience que j'ai eue, la ligne sheet.getRange (3, j, lr, 1), qui doit se répéter pour 20 000 cellules, est probablement à l'origine du problème.

Les commandes qui obtiennent ou définissent la feuille prennent souvent plus de temps et utilisent plus de mémoire pour s'exécuter. Par conséquent, il est recommandé d'utiliser l'un ou l'autre des lots ou, dans ce cas, vous pouvez probablement copier une ligne entière et la coller. Copier une formule et la coller dans une autre cellule mettra à jour les références de cellule, tout comme dans l'interface utilisateur.

1
Michael Pearson 22 janv. 2020 à 22:37