2017-06-03 8 views
1

Ich verwalte meine Bankkonten mit einem Google Spresit. Ich habe einen "Operations" spr. wo kopiere ich meine Operationen (von heruntergeladenen Extrakten von Konten). Dann tag ich sie: TYPE ("einmalig" oder "regulär"), KATEGORIE, UNTERKATEGORIE. Ich möchte automatisch so viele Zellen wie möglich dank der Bezeichnung der Operationen füllen. Das wäre so etwas wie:Google Spreadsheet Skript: für jede Zeile, automatisch Zelle füllen, wenn andere Zelle ist

browse rows where TYPE is undefined 
    if label is like '%...%' 
     then TYPE="..."; CATEGORY="..."; SUBCATEGORY="..." 
    if label is like '%...%' 
     then TYPE="..."; CATEGORY="..."; SUBCATEGORY="..." 
    and so on... 

Es scheint, dass ich die „if“ Bedingung richtig für eine einzelne Zeile (aber ich weiß nicht, wie man einen „wie“ Operator haben), aber ich weiß nicht Erfolg mit der Schleife auf leere TYPE-Zeilen.

var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Opérations'); 
    if (ss.getRange('E106').getValue() == 'PRLV SEPA AVIVA VIE'){ 
     ss.getRange('I106').setValue('Récurrent'); 
     ss.getRange('J106').setValue('Logement'); 
     ss.getRange('K106').setValue('Log-Assurance prêt'); 
    } 

Könnte jemand mir bei meinem Problem helfen? Vielen Dank, Mit freundlichen Grüßen, Guillaume

Antwort

0

ich auf meinem Skript gearbeitet und bekam schließlich etwas, das funktioniert:

 function preRemplissageAuto() { 
      var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Opérations'); 

      for (var i = 2; i < ss.getLastRow(); i++) { 
      var type = ss.getRange('I'+i); 
      if (type.getValue() == ''){ 
       var libelle = ss.getRange('E'+i).getValue(); 
       var categ = ss.getRange('J'+i); 
       var sscateg = ss.getRange('K'+i); 
       var commentaire = ss.getRange('L'+i); 
       var log = ss.getRange('M'+i); 

       if (ss.getRange('E'+i).getValue() == 'PRLV SEPA SOGESSUR') {type.setValue('Récurrent');categ.setValue('Assurances');sscateg.setValue('A-Habitation');log.setValue('Remplissage auto');  } 
       if (ss.getRange('E'+i).getValue() == 'PRLV SEPA MAIF 79038 NIORT CEDEX') {type.setValue('Récurrent');categ.setValue('Assurances');sscateg.setValue('A-MAIF');log.setValue('Remplissage auto');  } 
       if (ss.getRange('E'+i).getValue() == 'PRLV SEPA MGEN 112') {type.setValue('Récurrent');categ.setValue('Assurances');sscateg.setValue('A-MGEN');log.setValue('Remplissage auto');}  
       //etc, lots of "if" 
      } 
     } 

Das Skript arbeitet. Ich habe jetzt ungefähr 1000 Zeilen, aber der "Typ" (für die "if" Bedingung) ist leer auf etwa 100 Zeilen max. Ich hatte eine „Ausführungsverzögerung timed out“ das erste Mal, dass ich es lief, und bekam die folgenden Hinweise auf der Birne Symbol: (Rohübersetzung von französisch ;-))

Die Range.getValue Methode sehr verwendet wird von diesem Skript. Das Skript verwendet eine Methode, die als teuer angesehen wird. Jeder Anruf generiert einen langen Anruf an einen entfernten Server. Dies kann sich kritisch auf die Laufzeit des Skripts auswirken. insbesondere bei großen Datenmengen. Wenn das Skript das Leistungsproblem aufweist, empfehlen wir Ihnen, eine andere Methode zu verwenden, z. B. Range.getValues ​​().

Hat jemand einen Rat, mein Skript zu optimieren? (Mit der empfohlenen Methode oder nicht)

Vielen Dank für Ihre Hilfe, einen schönen Tag!

Guillaume

Verwandte Themen