2017-08-22 1 views
0

Vor kurzem habe ich meine erste Google Apps Script geschrieben, die eine Kopie einer Tabelle macht (einschließlich aller Registerkarten innerhalb dieser Tabelle) und legt sie in einen bestimmten Ordner in das Laufwerk des Benutzers. Die Kopie wird basierend auf einem Zellenwert in der ursprünglichen Tabelle umbenannt. Hier ist mein Skript, als Referenz:Kopieren Sie einen Bereich im aktiven Blatt, neue Tabelle mit benutzerdefinierten Namen, paste Bereich

function copyDocument() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); // Get current active spreadsheet. 
var id = ss.getId(); // Get current active spreadsheet ID. 
var sstocopy = DriveApp.getFileById(id); // Get spreadsheet with DriveApp. 
var sheet = ss.getActiveSheet(); // Get current active sheet. 
var sheet_name = sheet.getRange("B1").getValue(); // Get the value of cell B1, used to name the new spreadsheet. 
var folder_name = sheet.getRange("C23").getValue(); // Get the target folder ID. 
var folder = DriveApp.getFolderById(folder_name); // Get the ID of the folder where you will place a copy of the spreadsheet. 
sstocopy.makeCopy(sheet_name,folder); // Make a copy of the spreadsheet in the destination folder. 
} 

Dieses Skript funktioniert, aber ich bin gebeten worden, ihn zu ändern, da das Skript schrieb ich unnötig Tabs und Kopieren von Daten über die Verwirrung für die Benutzer verursacht.

Das neue Skript soll eine Kopie eines bestimmten Bereichs in einem bestimmten Blatt machen, eine neue Tabelle erstellen, und Paste, die in sie reichen. Es sollte sich auch nach einem Zellenwert im Bereich benennen.

jedoch die einzige Methode, die ich über die speziell kopiert ein Blatt in eine neue Tabelle gekommen sind, ist copyTo (Tabelle). Das Google Apps-Skripthandbuch gibt jedoch an, dass "das kopierte Blatt standardmäßig" Kopie von [ursprünglicher Name] 'heißt.

Ich möchte in der Lage, das kopierte Blatt nach einer bestimmten Zelle zu benennen. Meine Frage ist, kann ich copyTo (Tabellenkalkulation) verwenden und der neuen Tabelle einen benutzerdefinierten Namen geben, basierend auf einer Zelle?

Danke!

+0

Dies gilt nicht richtig 'var folder_name = sheet.getRange aussieht mit diesem anstelle von sstocopy.makeCopy() nach oben ("C23") getValue(). // Erhalte die Zielordner-ID. var Ordner = DriveApp.getFolderById (Ordnername); 'Scheint so, als ob du einen Namen für die Ordner-ID verwendest, und das wird nicht funktionieren. – Cooper

+0

Scheint wie makeCopy (Name, Ziel) ist genau das, was Sie wollen. – Cooper

+0

makeCopy (Name, Ziel) ist ideal, weil Sie damit den Namen der kopierten Datei angeben können. Ich möchte jedoch nicht die gesamte Tabelle kopieren. Ich möchte nur eine Reihe von Zellen kopieren, eine neue Tabelle erstellen und sie umbenennen, was ich möchte. Die Methode, die ich gefunden habe, copyTo (Tabellenkalkulation) führt das Kopieren eines Bereichs in eine neue Tabelle durch, erlaubt mir jedoch nicht, die neue Datei umzubenennen. –

Antwort

0

Sie müssen die Daten aus dem spezifischen Blatt bekommen, um eine Variable mit abzuschreiben:

var sourceSheet = ss.getSheetByName("Sheet1"); 
var sourceData = sourceSheet.getDataRange().getValues(); 
var originalRangeNotation = sourceSheet.getDataRange().getA1Notation(); 

Dann brauchen Sie eine neue, leere Datei zu erstellen und ein Blatt mit dem gleichen Namen machen

var ssNew = SpreadsheetApp.create("My New File Name"); 
ssNew.insertSheet('My New Sheet'); 

Fügen Sie dann den Inhalt aus den gespeicherten Daten in die neue Datei ein. Da das insertSheet das neue Blatt zum aktiven macht, verwenden wir:

var sheetNew = ssNew.getActiveSheet(); 
var rangeNew = sheet.getRange(originalRangeNotation); 
range.setValues(sourceData); 
+0

Danke. Ich benutzte dies anstelle von sstocopy.makeCopy() 'code' ordner.addFile() new_sheet.getActiveSheet(). GetRange (" X: Y "). SetValues ​​(sheet.getRange (" X: Y ") .getValues ​​()). DriveApp.getRootFolder(). RemoveFile (temp) –

0

Danke. Ich landete

folder.addFile() 
new_sheet.getActiveSheet().getRange("X:Y").setValues(sheet.getRange("X:Y").getValues()) 
DriveApp.getRootFolder().removeFile(temp) 
Verwandte Themen