2016-08-17 3 views
0

ich den Code unten gebaut habe und wenn ich es benutze ich immer eine Fehlermeldung von bekommenimmer ein Fehler in Google Skript „nicht Methode finden“

Es kommt auf „nicht Methode copyTo (Blatt) finden kann“ die Zeile, wenn ich versuche, auf die Zielblätter zu kopieren. Alle copyTo-Zeilen weisen denselben Fehler auf: source_sheet1.copyTo (target_sheet1);

Edit: Ich habe den Code geändert, aber immer noch die gleiche Fehlermeldung erhalten:

function UpdateCore() { 

    //Set Target (Core sheets to use) 
    var FindThisCore = "Compliance Spreadsheet Template- Sandton"; 
    var fileCore = DriveApp.searchFiles('title contains "' + FindThisCore+ '" and mimeType = "application/vnd.google-apps.spreadsheet"') 
    while (fileCore.hasNext()) { 
    var fileCoreMonth = fileCore.next(); 
    var target = SpreadsheetApp.openById(fileCoreMonth.getId()); 
    var getmonthsheet = target.getSheetByName("Run me") 
    var range = getmonthsheet.getRange(2,2); 
    var NewMonth = range.getValue();} 

    //Set compliance file to use 
    var FindThisMonth = "Compliance Spreadsheet Sandton " + NewMonth 

    //Set the Source values (Monthly Values) 
    var fileThisMonth = DriveApp.searchFiles('title contains "' + FindThisMonth + '" and mimeType = "application/vnd.google-apps.spreadsheet"') 
    while (fileThisMonth.hasNext()) { 
    var fileMonth = fileThisMonth.next(); 
    var source = SpreadsheetApp.openById(fileMonth.getId());} 

    CopyToSheet(source,target,"Guiding", "Guiding"); 
    CopyToSheet(source,target,"Learning", "Learning"); 
    CopyToSheet(source,target,"Bookkeeping", "Bookkeeping"); 
    CopyToSheet(source,target,"Fees", "Fees"); 
} 

Welche

function CopyToSheet (SourceFile, TargetFile, SourceSheet, TargetSheet){ 

    var SourceSheetFile = SpreadsheetApp.openById(SourceFile.getId()); 
    var TargetSheetFile = SpreadsheetApp.openById(TargetFile.getId()); 
    var sourcetoread = SourceSheetFile.getSheetByName(SourceSheet); 
    var targettowrite = TargetSheetFile.getSheetByName(TargetSheet); 

    sourcetoread.copyTo(targettowrite); 
} 

nennt Ich habe überprüft, dass es auf die richtigen Blätter verbindet, indem es klar, mit der Blätter im Ziel und Quelle - aber das copyTo funktioniert immer noch nicht.

Antwort

0

Ich habe versucht, den Code von dieser Funktion zu vereinfachen:

function test(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheetundefined = ss.getSheetByName("badName"); 
    var sheetdefined = ss.getSheetByName("existingName"); 
    sheetdefined.copyTo(sheetdefined); 
} 

Auf diese Weise wird der Fehler „nicht finden können, Methode copyTo ...“ ausgelöst wird.

Wenn Sie versuchen, "copyTo" für ein undefiniertes Objekt zu verwenden, wird die Fehlermeldung "copyTo von null kann nicht aufgerufen werden" ausgegeben. Also ich denke, das bedeutet einfach, Sie sollten überprüfen, bevor Ihre Hände, wenn Ihre Blätter definiert sind und Ihr Ziel und Quelle sind nicht das gleiche Objekt, vielleicht auf diese Weise.

+0

Ich habe überprüft = alle Dateien sind definiert und im Debug-Modus bekommen die URLs der Dateien zeigen die richtigen Dateien werden von den Variablen angezeigt. Ich habe versucht, es zu vereinfachen, indem ich die Parameter zu einer anderen Funktion schicke, um die Kopie zu tun, aber ich bekomme noch den gleichen Fehler. –

+0

Überprüfen Sie auch, ob die Blatt-IDs nicht gleich sind, wenn Sie copyTo verwenden? – michaelsinner

+0

Ja - verschiedene IDs, wenn ich eine .clear auf dem Blatt mache es das Blatt löscht (das ist auf source.clear die Quelle ist gelöscht, auf target.clear das Ziel ist gelöscht) ist die einzige Blatt-Funktionalität, die verwirrt zu sein scheint die copyTo –

0

Ich fand den Fehler: Ich verwendete die copyto-Methode Adressierung des Zielblattes, ich änderte es in der Datei und es funktioniert perfekt. Die Veränderung war sehr einfach, in der obigen Funktion I

geändert
sourcetoread.copyTo(targettowrite); 

zu

sourcetoread.copyTo(TargetSheetFile); 

Da ich es wollte das bestehende Blatt dieses Namen zu überschreiben. Ich habe die Gesamtfunktion geändert, um das vorhandene Blatt zu löschen, den neuen Namen zu kopieren und ihn dann in den ursprünglichen Namen umzubenennen (anstelle des automatisch zugewiesenen Namens "Kopieren nach ..."). Die vollständige neue Funktion sieht so aus:

function CopyToSheet (SourceFile, TargetFile, SourceSheet, TargetSheet){ 

    var SourceSheetFile = SpreadsheetApp.openById(SourceFile.getId()); 
    var TargetSheetFile = SpreadsheetApp.openById(TargetFile.getId()); 
    var sourcetoread = SourceSheetFile.getSheetByName(SourceSheet); 
    var targettowrite = TargetSheetFile.getSheetByName(TargetSheet); 
    TargetSheetFile.deleteSheet(targettowrite); 

    sourcetoread.copyTo(TargetSheetFile); 
    var RenameSheet = "Copy of " + TargetSheet; 
    var RenameThis = TargetSheetFile.getSheetByName(RenameSheet); 
    RenameThis.setName(SourceSheet) 

} 
Verwandte Themen