Estoy tratando de hacer una copia de una sola pestaña u hoja de una hoja de cálculo con varias pestañas. Puedo hacer una copia de toda la hoja, sin embargo, esto incluye información que el usuario final no necesita ver.
He visto algunos hilos sobre cómo crear una nueva hoja de cálculo dentro de la secuencia de comandos de las aplicaciones y luego lidiar con los detalles, aunque el formato se vuelve complicado. Sé que hay una manera de solucionar esto, pero me gustaría saber si hay un método tan simple como este. Lo uso actualmente para copiar una hoja completa.
//Escrito como un verdadero novato.
function Createcopy() { //Base var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('Review') var date = sheet.getRange(1,3).getValue(); // Probably wont need. //Folder detail var folderid = '1iEILmAp3JiOTiPjFbDhv0bAfgu6AWhtd' var Folder = "https://drive.google.com/drive/folders/"+folderid Logger.log(folderid) //Create copy var title = sheet.getRange(1,4).getValue(); Logger.log(title) var filename = title var destFolder = DriveApp.getFolderById(folderid); var createdcopy = DriveApp.getFileById(ss.getId()).makeCopy(filename, destFolder); var url = createdcopy.getUrl() Logger.log(url) }Creo que su objetivo es el siguiente.
Como usted dice, su secuencia de comandos copia toda la hoja de cálculo.
En este caso, me gustaría proponer el siguiente flujo.
Cuando este flujo se refleja en su guión, se convierte en lo siguiente.
function Createcopy() { var sheetName = 'Review'; // Please set the source sheet name. var folderId = '###'; // Please set the destination folder ID. // 1. Retrieve source sheet. var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName(sheetName); var title = sheet.getRange(1, 4).getValue(); // New Spreadsheet title. This is from your script. // 2. Copy source sheet to a new Spreadsheet and remove the default empty sheet. var newSS = SpreadsheetApp.create(title); sheet.copyTo(newSS).setName(sheetName); newSS.deleteSheet(newSS.getSheets()[0]); // 3. Move a new Spreadsheet to the destination folder. var dstFolder = DriveApp.getFolderById(folderId); DriveApp.getFileById(newSS.getId()).moveTo(dstFolder); // 4. Retrieve URL of a new Spreadsheet. var url = newSS.getUrl(); Logger.log(url) }En este caso, si la hoja de origen incluye las fórmulas para cargar los valores de otra hoja, se produce un error. Tenga cuidado con esto. Y también, por ejemplo, cuando la hoja de origen incluye la función personalizada, creo que podría usarse el siguiente script.
function Createcopy() { var sheetName = 'Review'; // Please set the source sheet name. var folderId = '###'; // Please set the destination folder ID. var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName(sheetName); var title = sheet.getRange(1, 4).getValue(); // New Spreadsheet title. This is from your script. var dstFolder = DriveApp.getFolderById(folderId); var newSSFile = DriveApp.getFileById(ss.getId()).makeCopy(title, dstFolder); var newSS = SpreadsheetApp.open(newSSFile); newSS.getSheets().forEach(s => { if (s.getSheetName() != sheetName) newSS.deleteSheet(s); }); var url = newSS.getUrl(); Logger.log(url) }