Copiar hoja de cálculo a un nuevo archivo, especificar fichas

Estoy copiando una nueva instancia de mi hoja de cálculo sin fórmulas en una carpeta. Encontré un guión que funciona genial aquí: Copiar una hoja de cálculo completa, Sólo Preserve los valores.

Estaba tratando de definir una ficha específica para copiar pero sin suerte.

var sheet = ss.getSheetByName('tab to dowload');

y

var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setActiveSheet(ss.getSheets()[2]); 
function myFunction() {
  var spreadsheetId = "###"; // Please set the source Spreadsheet ID.
  var destFolderId = "###";  // Please set the destination folder ID.

  // Copy each sheet in the source Spreadsheet by removing the formulas as the temporal sheets.
  var ss = SpreadsheetApp.openById(spreadsheetId);
  var tempSheets = ss.getSheets().map(function(sheet) {
    var dstSheet = sheet.copyTo(ss).setName(sheet.getSheetName() + "_temp");
    var src = dstSheet.getDataRange();
    src.copyTo(src, {contentsOnly: true});
    return dstSheet;
  });

  // Copy the source Spreadsheet.
  var destination = ss.copy(ss.getName() + " - " + new Date().toLocaleString());

  // Delete the temporal sheets in the source Spreadsheet.
  tempSheets.forEach(function(sheet) {ss.deleteSheet(sheet)});

  // Delete the original sheets from the copied Spreadsheet and rename the copied sheets.
  destination.getSheets().forEach(function(sheet) {
    var sheetName = sheet.getSheetName();
    if (sheetName.indexOf("_temp") == -1) {
      destination.deleteSheet(sheet);
    } else {
      sheet.setName(sheetName.slice(0, -5));
    }
  });

  // Move file to the destination folder.
  var file = DriveApp.getFileById(destination.getId());
  DriveApp.getFolderById(destFolderId).addFile(file);
  file.getParents().next().removeFile(file);
}

Pregunta hecha hace 3 años, 4 meses, 28 días - Por htmlhero


3 Respuestas:

  • Explicación:

    Su objetivo es pasar hojas seleccionadas, basadas en su nombre, al archivo recién creado.

    Puedes hacerlo definiendo una lista con las hojas seleccionadas:

    var selected_sheets = ['Sheet1','Sheet5'];

    y luego en lugar de usar ss.getSheets() que obtiene cada hoja, utilice esto para obtener el objeto de la hoja de los nombres seleccionados:

    var tempSheets = selected_sheets.map(sn=>ss.getSheetByName(sn))
        .map(function(sheet) {
        var dstSheet = sheet.copyTo(ss).setName(sheet.getSheetName() + "_temp");
        var src = dstSheet.getDataRange();
        src.copyTo(src, {contentsOnly: true});
        return dstSheet;
      });
    

    Solución:

    Por favor, modifique esta lista: var selected_sheets = ['Sheet1','Sheet5']; y reemplazar Sheet1, Sheet5 al nombre de sus hojas. También puede tener una hoja: por ejemplo. var selected_sheets = ['Sheet1'];.

    function myFunction() {
      var spreadsheetId = "###"; // Please set the source Spreadsheet ID.
      var destFolderId = "###";  // Please set the destination folder ID.
    
      // Copy each sheet in the source Spreadsheet by removing the formulas as the temporal sheets.
      var ss = SpreadsheetApp.openById(spreadsheetId);
      var selected_sheets = ['Sheet1','Sheet5']; // Add the sheets you want to copy here!
      var tempSheets = selected_sheets.map(sn=>ss.getSheetByName(sn))
        .map(function(sheet) {
        var dstSheet = sheet.copyTo(ss).setName(sheet.getSheetName() + "_temp");
        var src = dstSheet.getDataRange();
        src.copyTo(src, {contentsOnly: true});
        return dstSheet;
      });     
    
      // Copy the source Spreadsheet.
      var destination = ss.copy(ss.getName() + " - " + new Date().toLocaleString());
    
      // Delete the temporal sheets in the source Spreadsheet.
      tempSheets.forEach(function(sheet) {ss.deleteSheet(sheet)});
    
      // Delete the original sheets from the copied Spreadsheet and rename the copied sheets.
      destination.getSheets().forEach(function(sheet) {
        var sheetName = sheet.getSheetName();
        if (sheetName.indexOf("_temp") == -1) {
          destination.deleteSheet(sheet);
        } else {
          sheet.setName(sheetName.slice(0, -5));
        }
      });
    
      // Move file to the destination folder.
      var file = DriveApp.getFileById(destination.getId());
      DriveApp.getFolderById(destFolderId).addFile(file);
      file.getParents().next().removeFile(file);
    }
    

    Respondida el Dec 18, 2020 a las 10:57 - por codergeek24

    Votos positivos: 0 | Votos negativos: 0

  • Para copiar una hoja de cálculo a un nuevo archivo y especificar la ficha que deseas copiar, puedes modificar un poco el script que encontraste. Aquí te dejo un ejemplo de cómo hacerlo:

    javascript
    function copySheetToNewFile() {
      var spreadsheetId = "
    "; // ID de la hoja de cálculo de origen
    var sheetName = "tab to download"; // Nombre de la ficha que deseas copiar var destFolderId = "
    "; // ID de la carpeta de destino
    var ss = SpreadsheetApp.openById(spreadsheetId); var sheet = ss.getSheetByName(sheetName); // Crear una nueva hoja de cálculo con la ficha especificada var newSS = SpreadsheetApp.create(sheetName); // Copiar la hoja especificada a la nueva hoja de cálculo var newSheet = sheet.copyTo(newSS); // Mover la nueva hoja de cálculo a la carpeta de destino var file = DriveApp.getFileById(newSS.getId()); DriveApp.getFolderById(destFolderId).addFile(file); file.getParents().next().removeFile(file); }

    En este script, se copia la hoja especificada a una nueva hoja de cálculo y luego se mueve ese archivo a la carpeta de destino. Recuerda reemplazar los marcadores "

    " con los ID correspondientes de tu hoja de cálculo de origen y la carpeta de destino. Además, modifica el valor de sheetName con el nombre de la ficha que deseas copiar.

    Espero que esta solución te sea de ayuda. ¡Déjame saber si tienes alguna otra pregunta!

    Respondida el Dec 19, 2020 a las 11:01 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para copiar una pestaña específica de una hoja de cálculo a un nuevo archivo, puedes modificar el script de la siguiente manera:

    js
    function copySheetToNewFile(sheetName) {
      // Get the source spreadsheet and sheet.
      var sourceSpreadsheet = SpreadsheetApp.getActiveSheet().getSpreadsheet();
      var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
    
      // Copy the source sheet to a new spreadsheet.
      var newSpreadsheet = sourceSheet.copyTo(SpreadsheetApp.create('New spreadsheet'));
    
      // Delete the original sheet from the new spreadsheet.
      newSpreadsheet.deleteSheet(newSpreadsheet.getSheets()[0]);
    
      // Move the new spreadsheet to the destination folder.
      var destinationFolderId = "
    "; // Please set the destination folder ID.
    var file = DriveApp.getFileById(newSpreadsheet.getId()); DriveApp.getFolderById(destinationFolderId).addFile(file); file.getParents().next().removeFile(file); }

    Para utilizar este script, sigue estos pasos:

    • Abre la hoja de cálculo que contiene la pestaña que deseas copiar.
    • Asegurate de que la pestaña que deseas copiar esté activa.
    • En el Editor de secuencias de comandos, pega el script proporcionado.
    • Reemplaza el valor de `sheetName` con el nombre de la pestaña que deseas copiar.
    • Reemplaza el valor de `destinationFolderId` con el ID de la carpeta de destino donde deseas que se almacene el nuevo archivo.
    • Guarda el script y ejecútalo.

    El script copiará la pestaña especificada a un nuevo archivo en la carpeta de destino. Ten en cuenta que el nuevo archivo no contendrá fórmulas, solo los valores de las celdas.

    Respondida el Dec 19, 2020 a las 11:09 - por Gemini

    Votos positivos: 0 | Votos negativos: 0