2017-02-10 3 views
0

Sehr erste Frage zu Stack Exchange hoffentlich macht es Sinn.Google Apps-Skript für mehrere Suchen und Ersetzen in Google Tabellen

Einige Hintergrundinformationen: Ich arbeite in einer Schulumgebung und unterstütze das Learning Support-Team bei der Erstellung besser lesbarer Stundenpläne für bestimmte Schüler.

Sie kopieren die Stundenplandaten von unserer Website, die Themencodes, Lehrernamen und Raumnummern enthalten. Es ist genau das gleiche Format wie im Bild unten - ich habe es einfach in Google Tabellen kopiert.

GoogleSheetsImage

Ich brauche im Wesentlichen eine Bulk-Suchen und Ersetzen für alle diese Codes auszuführen, und erweitern sie so vollständig, dass ein Subjekt Code z.B. 01ENG02 wird "Englisch" und ein Lehrercode, z. JBO wird "Joe Bloggs"

Ich habe eine vollständige Liste von dem, was ich brauche die Codes zu erweitern - es ist nur, wie Sie dies am besten implementieren. Hier

ist einiger Google-Code Scripts, in denen ich auf beiden Stapel Exchange und anderen Seiten gefunden habe, die ich verwende:

function runReplaceInSheet(){ 
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("StudentTimetableEntry"); 

    // Replace Subject Names 

     replaceInSheet(sheet,/\d\dART\d\d/g,"Art"); 
     replaceInSheet(sheet,/\d\dCCL\d\d/g,"Communication & Culture"); 
     replaceInSheet(sheet,/\d\dDLT\d\d/g,"Digital Technology"); 
     replaceInSheet(sheet,/\d\dDRA\d\d/g,"Drama"); 

    // Replace Staff Names 

     replaceInSheet(sheet,'TED','Tahlee Edward'); 
     replaceInSheet(sheet,'TLL','Tyrone LLoyd'); 
     replaceInSheet(sheet,'TMA','Timothy Mahone'); 
     replaceInSheet(sheet,'TQU','Tom Quebec'); 
     } 

     function replaceInSheet(sheet, to_replace, replace_with) { 
      //get the current data range values as an array 
      var values = sheet.getDataRange().getValues(); 

      //loop over the rows in the array 
      for(var row in values){ 

      //use Array.map to execute a replace call on each of the cells in the row. 
      var replaced_values = values[row].map(function(original_value){ 
       return original_value.toString().replace(to_replace,replace_with); 
      }); 

      //replace the original row values with the replaced values 
      values[row] = replaced_values; 
      } 

      //write the updated values to the sheet 
      sheet.getDataRange().setValues(values); 
     } 

Diese perfekt funktioniert. Ich habe jedoch über 150 Personalnamen und ungefähr die gleiche Anzahl von Betreff-Codes. Der Prozess erreicht die maximale Zeit und ich bin mir sicher, dass es eine bessere Möglichkeit geben muss, dies zu programmieren.

Ich werde alternative Methoden in Betracht ziehen, nur daran denken, es muss so einfach wie möglich für die Mitarbeiter sein, die es verwenden werden.

Antwort

0

Jedes Mal, wenn Sie in Ihrem Skript getValues ​​und setValues ​​aufrufen, entstehen erhebliche Overheadkosten und verlangsamt das Skript. (Google app script timeout ~ 5 minutes?) Ich habe Ihr Skript so modifiziert, dass 1 Aufruf für getValues ​​und 1 Aufruf von setValues ​​erfolgt. Der Code gilt für alle Ersetzungen, bevor der geänderte Zeitplan wieder eingefügt wird.

Geben Sie diesem Code einen Versuch, wenn Sie immer noch Probleme mit Timeouts haben, ist mein Vorschlag Setup-Trigger, um Kettenfunktionen zu helfen.

+0

Arbeitete wie ein Charme! – Stephen

+0

Froh, mit der Erziehung junger Köpfe zu helfen :) –

Verwandte Themen