2017-12-14 3 views
0

Ich versuche Google Apps Script copy() zu verwenden, um mein Master-Arbeitsblatt in ein Ausgabe-Arbeitsblatt zu "publizieren", aber jedes Mal mehrere Kopien zu erhalten, anstatt die Ausgabedatei zu ersetzen. Kann jemand eine Möglichkeit vorschlagen, den Inhalt einer Zieltabelle zu ersetzen, damit ich die gleiche Datei-ID für die Ausgabe beibehalten und manuell eine "Veröffentlichung" auslösen kann. Habe versucht copyTo, aber macht nur mehrere Blätter statt.Google Apps Script - In vorhandenes Arbeitsblatt kopieren

Die Master-Tabelle ist eine Mitarbeiterliste, die von mehreren Managern bearbeitet werden kann, ohne dass die Mitarbeiter die Live-Version sehen. Wenn der Manager die Aktualisierung abgeschlossen hat, kann er an die Mitarbeiter weitergeleitet werden.

Edit: Verstanden

function publishRoster() { 
    var source = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = source.getActiveSheet(); 
    var updatedDateTime = sheet.getRange("A1"); 
    var now = Utilities.formatDate(new Date(), "GMT+10:30", "dd/MM/yyyy H:mm") 
updatedDateTime.setValue("Last Published " + now); 
    var sourceName = source.getSheetName(); 
// var sValues = source.getDataRange().getValues(); 
    var destination = SpreadsheetApp.openById('my-destination-sheet-id-here'); 
    var destinationSheet = destination.getSheetByName(sourceName); 
    if (destinationSheet == null) { } 
else { destination.deleteSheet(destinationSheet); } 
    sheet.copyTo(destination).setName(sourceName); 
} 

Antwort

0

copyTo() erstellt eine Kopie des bestehenden Blattes in dem Ziel Tabelle arbeiten. Wenn Sie die Änderungen von einem bestimmten Blatt zum angegebenen Zielblatt veröffentlichen möchten, können Sie die Daten vom Quellblatt zum Zielblatt kopieren, anstatt das gesamte Blatt zu kopieren [das bei jedem Kopieren natürlich neue Blätter erstellt]

so ist der Code zu kopieren/veröffentlichen Daten aus Stammblatt Blatt Slave geht wie folgt:

var SOURCEID = 'xxxxxxxxxxxxx'; //put your source spreadsheet id here 
    var SOURCESHEETNAME = 'XXXXX'; //put your source sheet name here 
    var DESTINATIONID = 'xxxxxxxxxxxxx'; //put your destination spreadsheet id here 
    var DESTINATIONSHEETNAME = 'XXXXX'; //put your destination sheet name here 

    var data = SpreadsheetApp.openById(SOURCEID).getSheetByName(SOURCESHEETNAME).getDataRange().getValues(); 
    SpreadsheetApp.openById(DESTINATIONID).getSheetByName(DESTINATIONSHEETNAME).clear(); //This line is to clear the existing data in destination. 
    SpreadsheetApp.openById(DESTINATIONID).getSheetByName(DESTINATIONSHEETNAME).getRange(1, 1, data.length; data[0].length).setValues(data); 
    //data.length = no. of rows in source 
    //data[0].length = no. of columns in source 
    var now = Utilities.formatDate(new Date(), "GMT+10:30", "dd/MM/yyyy H:mm");  
SpreadsheetApp.openById(DESTINATIONID).getSheetByName(DESTINATIONSHEETNAME).getRange("A1").setValue("Last Published " + now); 

Dies ist kein getesteten Code, lassen Sie mich wissen, wenn irgendwelche Probleme entstehen, ich werde glücklich sein, zu helfen Sie. Dank

+0

Dank @Umair, ich brauche es, um die Formatierung und ein paar verbundene Zellen zu kopieren, so dass copyTo() wird wahrscheinlich am besten funktionieren. Ich habe einige Zeilen eingefügt, um die neuen Blätter zu löschen und umzubenennen, aber jetzt bekomme ich "TypeError: Funktion copyTo in Objekttabelle nicht gefunden" –

+0

Code jetzt eingefügt in Frage –

+0

Sie möchten den Zeitstempel in Zelle A1 setzen? Ich habe die Antwort aktualisiert. Entschuldigung für die späte Antwort. – Umair

Verwandte Themen