Copiar un rango de una hoja de cálculo a otra con formato mediante API de hoja de cálculo avanzada

Necesito copiar pegar un rango de archivo de hoja de plantilla a archivo de hoja de trabajo actual. Entiendo desde el siguiente código, eso no es posible.

¿Es posible conseguir esto usando el servicio avanzado de Sheets API?

De hecho, necesito copiar anchos de celda de pasta, formato, mergedcells, etc de rango de archivos de plantilla a archivo actual

He intentado con

function copyToMySheetFromTemplateFileRange()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getActiveSheet();
  var tss = SpreadsheetApp.openById(ID_OF_TEMPLATE_SPREADSHEET);
  var tsheet = tss.getSheetByName("SHEET_A")
  
  tsheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns())
  var newSheet = ss.insertSheet(1);
  newSheet.getRange(2, 1).activate();
  tsheet.getDataRange().copyTo(newSheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);

}

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


2 Respuestas:

  • Para copiar un rango de una hoja de cálculo a otra con formato utilizando la API avanzada de Google Sheets, se puede realizar lo siguiente:

    • Habilitar la API avanzada de Google Sheets en el proyecto de Google Cloud Platform y obtener las credenciales necesarias.
    • Utilizar el siguiente código para copiar un rango de una hoja de plantilla a una hoja de trabajo actual con todo el formato, anchos de celda, celdas fusionadas, etc. Para esto vamos a utilizar la función `spreadsheets.sheets.copyTo` de la API de Google Sheets.
    javascript
    function copyToMySheetFromTemplateFileRange() {
      var destinationSheetId = SpreadsheetApp.getActiveSpreadsheet().getId(); // ID de la hoja de trabajo actual
      var sourceSpreadsheetId = ID_OF_TEMPLATE_SPREADSHEET; // ID de la hoja de plantilla
      var sourceSheetName = "SHEET_A"; // Nombre de la hoja de la plantilla
    
      var range = {
        sheetId: getSourceSheetId(sourceSpreadsheetId, sourceSheetName),
        startRowIndex: 0,
        endRowIndex: SpreadsheetApp.openById(sourceSpreadsheetId).getSheetByName(sourceSheetName).getMaxRows(),
        startColumnIndex: 0,
        endColumnIndex: SpreadsheetApp.openById(sourceSpreadsheetId).getSheetByName(sourceSheetName).getMaxColumns()
      };
    
      var copySheetRequest = {
        destinationSpreadsheetId: destinationSheetId,
        sourceSheetId: range.sheetId,
        sheetId: destinationSheetId,
        source: range
      };
    
      var requests = [{
        copySheet: copySheetRequest
      }];
    
      Sheets.Spreadsheets.batchUpdate({requests: requests}, destinationSheetId);
    }
    
    function getSourceSheetId(sourceSpreadsheetId, sourceSheetName) {
      var sheet = Sheets.Spreadsheets.get(sourceSpreadsheetId);
      var sheets = sheet.sheets;
    
      for (var i = 0; i < sheets.length; i++) {
        if (sheets[i].properties.title === sourceSheetName) {
          return sheets[i].properties.sheetId;
        }
      }
    }
    
    

    En este código, reemplaza ID_OF_TEMPLATE_SPREADSHEET con el ID de la hoja de plantilla y asegúrate de que la hoja de plantilla se llame "SHEET_A".

    Este código utiliza la API avanzada de Google Sheets para copiar el rango seleccionado de la hoja de plantilla a la hoja de trabajo actual con todos los ajustes de formato, anchos de celda, celdas fusionadas, etc. Asegúrate de tener las credenciales y permisos necesarios para usar la API avanzada.

    Respondida el Dec 18, 2020 a las 13:18 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Sí, es posible copiar un rango de una hoja de cálculo a otra con formato utilizando la API de Hojas de cálculo avanzada. Aquí tienes el código para hacerlo:

    
    function copyToMySheetFromTemplateFileRange() {
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const sheet = ss.getActiveSheet();
      const tss = SpreadsheetApp.openById(ID_OF_TEMPLATE_SPREADSHEET);
      const tsheet = tss.getSheetByName("SHEET_A");
    
      // Obtener el rango de la hoja de cálculo de origen
      const sourceRange = tsheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns());
    
      // Crear una nueva hoja de cálculo en la hoja de cálculo de destino
      const newSheet = ss.insertSheet(1);
    
      // Copiar el rango de la hoja de cálculo de origen a la nueva hoja de cálculo
      const request = {
        requests: [
          {
            copyPaste: {
              source: {
                sheetId: sourceRange.getSheet().getSheetId(),
                startRowIndex: sourceRange.getRowIndex() - 1, // Los índices de las filas y columnas son 0-indexados
                startColumnIndex: sourceRange.getColumnIndex() - 1,
                endRowIndex: sourceRange.getRowIndex() + sourceRange.getNumRows() - 1,
                endColumnIndex: sourceRange.getColumnIndex() + sourceRange.getNumColumns() - 1,
              },
              destination: {
                sheetId: newSheet.getSheetId(),
                startRowIndex: 1, // La fila 1 es la primera fila de la nueva hoja de cálculo
                startColumnIndex: 1, // La columna 1 es la primera columna de la nueva hoja de cálculo
              },
              pasteType: "PASTE_FORMAT",
            },
          },
        ],
      };
    
      // Ejecutar la solicitud
      Sheets.Spreadsheets.batchUpdate({
        requests: request.requests
      }, ss.getId());
    }
    

    Este código creará una nueva hoja de cálculo en la hoja de cálculo activa y copiará el rango especificado de la hoja de cálculo de origen a la nueva hoja de cálculo, conservando el formato, los anchos de celda, las celdas combinadas, etc.

    Respondida el Dec 18, 2020 a las 13:25 - por Gemini

    Votos positivos: 0 | Votos negativos: 0