2017-04-14 2 views
0

Ich schreibe ein Projektmanagement-Tool in Google Tabellen. Ich habe eine Vorlage für ein Projekt, das jedes Mal kopiert und umbenannt wird, wenn jemand ein neues Projekt startet. Ich habe einen sehr seltsamen Fehler mit der folgenden Funktion.getRange schlägt auf Vorlage Funktion

Zunächst entschuldige ich mich für die Formatierung unten; Egal, wie ich es versuchte, ich konnte einfach keine Zeile in der Mitte bekommen, um in das Code-Format zu gehen, also ist der Code in zwei Hälften geteilt, mit einer seltsamen Linie in der Mitte. Ich versichere Ihnen, dies ist eine Funktion, die in Google Apps ausgeführt wird.

Der Fehler tritt in der Zeile kurz vor der Unterbrechung auf: "empArchive, getRange (archiveCurrRow, 1, 1, 6) .setValues ​​(masterListTop.getRange (i, 1,1,6) .getValues ​​())// archiviere das Projekt ". Wenn ich das zum ersten Mal in einer neuen Datei starte, stoppt es bei dieser Zeile und zeigt einen Fehler an, der besagt, dass "getRange" nicht definiert ist. Ich habe einige Aufrufe in den Zeilen unmittelbar davor hinzugefügt, um zu überprüfen, dass getRange tatsächlich sowohl für MasterListTop als auch für EmpArchive definiert ist, und diese Aufrufe funktionieren einwandfrei.

Ich habe versucht, die fragliche Zeile auskommentieren, da die folgende Zeile fast identisch ist, und das Skript lief gut. Ich habe die Zeile unkommentiert und das Skript lief wieder gut. Jedes Mal, wenn ich eine neue Datei aus dieser Vorlage erstelle, erhalte ich diesen Fehler. Wenn ich die Problem-Zeile auskommentiere und auskommentiere, wird sie ausgeführt. Das ist natürlich kein praktischer Umweg. Hat jemand eine Idee, warum das passiert?

Vielen Dank im Voraus für Ihre Hilfe.

function onEdit(){ 
    var projectSheet = SpreadsheetApp.getActive().getSheets()[0]; 
    if((projectSheet.getRange(6,2).getValue()=="Completed")&&(projectSheet.getRange(9,9).getValue()!= "Completed")){  //find if project has been marked Completed 
    var empList = SpreadsheetApp.openById("XXXXXXXXXXX").getSheets()[0];  //open list of employees 
    var masterList = SpreadsheetApp.openById("XXXXXXXXXXX")  //open the master list 
    var masterListTop = masterList.getSheets()[0] 
    var i = 2; 
    while(masterListTop.getRange(i,1).getValue() != projectSheet.getRange(1,2).getValue() && masterListTop.getRange(i,1).getValue() != "ZZZ"){  //find this project on the master list 
     var currValue = masterListTop.getRange(i,1).getValue() 
     i++ 
     } 
    if(masterListTop.getRange(i,1).getValue() != "ZZZ" && masterListTop.getRange(i,11).getValue() == "No"){  //if the project has not been archived, do the following 
     var j = 2 
     while(empList.getRange(j,3).getValue() != projectSheet.getRange(2,2).getValue()){  //find the project owner on the employee list 
     j++ 
     } 
     var empSheet = SpreadsheetApp.openByUrl(empList.getRange(j,5).getValue())  //open that employee's page 
     var empArchive = empSheet.getSheets()[2]; 
     var empName = empArchive.getRange(1,1,1,1).getValue() 
     var archiveCurrRow = empArchive.getLastRow()+1 
     var projectName = masterListTop.getRange(i,1,1,1).getValue() 
     empArchive,getRange(archiveCurrRow, 1, 1, 6).setValues(masterListTop.getRange(i,1,1,6).getValues())  //archive the project 
//above is the problem line 
empArchive.getRange(archiveCurrRow,7,1,1).setValue(masterListTop.getRange(i,10,1,1).getValue()) 

     masterListTop.getRange(i,11).setValue("Yes")  //mark the project Archived 
    } 
    var m = 11 
while(projectSheet.getRange(m,1).getValue() != ""){ 
    if(projectSheet.getRange(m,9).getValue() == "No"){  //find unarchived tasks in this project 
    var n = 2 
    while(empList.getRange(n,3).getValue() != projectSheet.getRange(m,2).getValue()){  //find the task owner on the employee list 
     n++ 
     } 
    empSheet = SpreadsheetApp.openByUrl(empList.getRange(n,5).getValue())  //open the task owner's page 
    var empTaskArchive = empSheet.getSheets()[3] 
    empTaskArchive.getRange(empTaskArchive.getLastRow()+1, 1, 1, 1).setValue(projectSheet.getRange(m,1).getValue())  //archive the task 
    empTaskArchive.getRange(empTaskArchive.getLastRow(), 2, 1, 4).setValues(projectSheet.getRange(m, 3, 1, 4).getValues()) 
    empTaskArchive.getRange(empTaskArchive.getLastRow(), 6, 1, 1).setValue(masterListTop.getRange(i, 1).getValue()) 
    empTaskArchive.getRange(empTaskArchive.getLastRow(), 7, 1, 1).setValue(projectSheet.getRange(7, 2).getValue()) 
    empTaskArchive.getRange(empTaskArchive.getLastRow(), 8, 1, 1).setValue(masterListTop.getRange(i,10).getValue()) 
    projectSheet.getRange(m,9).setValue("Yes")  //mark the task Archived 
     } 
    m++ 
    } 
    projectSheet.getRange(9,9).setValue("Completed") 
    } 
} 
+0

[tag: google-tabellen~~POS=TRUNC-api] ist nicht das gleiche wie der SpreadsheetApp Dienst von Google Apps Script. Um die Zeile, die nicht in der Codeformatierung angezeigt wurde, mit markdown zu "reparieren", wurde die Einrückung entfernt. Andere Dinge, die Sie versuchen könnten, ist ''. Ich denke, dass dieses Formatierungsproblem auf [meta] berichtet werden sollte. –

+0

In Bezug auf das Hauptproblem versuchen Sie, das Problem mit den minimalen Codezeilen zu reproduzieren. Für weitere Details siehe [mcve]. –

+0

Nicht sicher, ob dies eine Fehlerquelle oder ein Kopierfehler ist. Aber hier ist ein Komma 'empArchive, getRange (archiveCurrRow, 1, 1, 6)' sollte ein "." nach empArchive, wie zum Beispiel 'empArchive.getRange (archiveCurrRow, 1, 1, 6)' –

Antwort

0

Der Fehler wurde auf einen Tippfehler in dem folgenden Code verursacht durch:

empArchive,getRange(archiveCurrRow, 1, 1, 6) 

Es soll ein Punkt sein (" ") anstelle von einem Komma (","), wie so

empArchive.getRange(archiveCurrRow, 1, 1, 6)