Hola Quería copiar una fila en particular de una hoja de cálculo a otra hoja de cálculo usando el script de Google Apps. ¿Alguien puede ayudarme a obtener la respuesta para esto?Cómo copiar una fila de una hoja de cálculo de google a otra hoja de cálculo de google usando el script de google apps?
Respuesta
Mira la documentación aquí:
http://code.google.com/googleapps/appsscript/service_spreadsheet.html
Supongamos que está trabajando en la hoja de cálculo donde se está grabando de.
Tendría que obtener un control de la hoja de cálculo actual y la hoja de cálculo de destino. Deberá obtener la identificación para la hoja de cálculo de destino. Los detalles están en el enlace allí arriba.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.openById("abc1234567");
A continuación tenemos que elegir las hojas específicas dentro de esas hojas de cálculo. Supongamos que su fila está en la hoja llamada "Cosas nuevas" y tiene una hoja en la hoja de cálculo de destino denominada "Archivo".
var source_sheet = ss.getSheetByName("New Stuff");
var target_sheet = target.getSheetByName("Archive");
Ahora, el concepto que usan las hojas de cálculo de Google Apps son los rangos. Un rango es solo un trozo de celdas. Entonces, necesitamos determinar el rango y el rango. Digamos que su hoja tiene 7 columnas y desea la 10ma fila.
var source_range = source_sheet.getRange("A10:G10");
var target_range = target_sheet.getRange("A1:G1");
Así que vamos a tomar esa fila y ponerla en la primera fila de la hoja de destino. Ahora para la copia real:
source_range.copyTo(target_range);
¡Y listo!
Ahora, esto siempre golpeará la primera fila de la hoja de destino. Hay mucho que puedes hacer para detener eso. En lugar de usar siempre la primera línea, puede usar los métodos del objeto hoja para encontrar la última fila, agregar una después y luego usarla como su rango.
var last_row = target_sheet.getLastRow();
target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1));
De esa manera cada vez que se copia una fila más, sólo se agrega a la parte inferior de la hoja.
Esto no funciona - devuelve un error "El rango de destino y el rango de origen deben estar en la misma hoja de cálculo". Parece que tenemos que hacer algo similar a esto:
function copyRow_ (origSheetName, destSheetName, origRowNumber, destRowNumber)
{
var origSheetObject = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(origSheetName);
var destSheetObject = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(destSheetName);
var origLastCol = origSheetObject.getLastColumn();
var arrOrigData = origSheetObject.getRange(origRowNumber, 1, 1, origLastCol).getValues();
var destlastRow = destSheetObject.getLastRow() + 1;
if (destRowNumber)
destlastRow = destRowNumber;
var cont;
for (cont = 0; cont < origLastCol; cont++)
destSheetObject.getRange(destlastRow, 1+cont).setValue(arrOrigData[0][cont]);
}
(robado descaradamente de here)
Esto funciona para valores pero no para formatos. La solución de Stefan van Aalsts funciona para ambos. – Josh
me encontré con esto también. Me las arreglé para encontrar una buena solución que copia todo de una hoja a otra (a excepción de imágenes, gráficos, scripts y demás). Copia fórmulas, valores, formateo seguro.
Básicamente la solución es
- copia la hoja de origen a la hoja de cálculo de destino como una hoja fuente temp
- copiar los datos de la hoja de fuente temp a la hoja de destino
- eliminar la fuente temp hoja de
Código:
var sss = SpreadsheetApp.openById(spreadsheet); // sss = source spreadsheet
var ss = sss.getSheetByName(sheet); // ss = source sheet
var ss_temp = ss.copyTo(targetsheet);
var tss = SpreadsheetApp.openById(spreadsheet); // tss = target spreadsheet
var ts = tss.getSheetByName(sheet); // ts = target sheet
var range2Copy = ss_temp.getRange(range);
range2Copy.copyTo(ts.getRange(range));
bss.setActiveSheet(ss_temp);
bss.deleteActiveSheet()
Basado en lo anterior, creé una hoja de cálculo que me permite actualizar muchas copias de una hoja de cálculo maestra. Con alrededor de 15 copias, ahorra una gran cantidad de acciones de copiar y pegar.
el método copyTo está poco documentado porque no le permite copiar el contenido de una hoja en una hoja de otra hoja de cálculo. Usted tendrá que usar los setValues GetValues ans, como a continuación:
function CopyDataToNewFile() {
var sss = SpreadsheetApp.openById('0AjN7uZG....'); // sss = source spreadsheet
var ss = sss.getSheetByName('Monthly'); // ss = source sheet
//Get full range of data
var SRange = ss.getDataRange();
//get A1 notation identifying the range
var A1Range = SRange.getA1Notation();
//get the data values in range
var SData = SRange.getValues();
var tss = SpreadsheetApp.openById('8AjN7u....'); // tss = target spreadsheet
var ts = tss.getSheetByName('RAWData'); // ts = target sheet
//set the target range to the values of the source data
ts.getRange(A1Range).setValues(SData);
}
Tal vez este post http://l.rw.rw/gscripts3 ayuda. Describe la funcionalidad de la función de copia con diferentes condiciones (límites de datos por rango, filtros personalizados, datos de lugares para orientar con métodos de inserción o reemplazo). Y tiene un ejemplo de trabajo donde puedes probarlo.
Otra forma de hacerlo sería importar la fila (o cualquier rango) de la fuente en la hoja de cálculo de destino.
Suponiendo que desea importar la fila 3 de la hoja de hoja de cálculo fuente llamada "fuente de hojas de cálculo hojas-name", puesto en la primera columna de la ubicación de destino de la siguiente fórmula:
=IMPORTRANGE("source-spreadsheet-key","source-spreadsheet-sheet-name!3:3")
donde "source-spreadsheet-key"
es el ID único de la hoja de cálculo fuente que extrae de su URL.
Si lo hace por primera vez, aparecerá el mensaje de seguridad:
Sólo confirmar y toda la fila será rellenado automáticamente.
Recuerde que a veces lleva un par de minutos actualizar las celdas importadas después de realizar cambios en el área de origen. Sin embargo, puede acelerarlo presionando ctrl-E, o ctrl-shift-E, mientras está en la hoja de cálculo de destino, lo que funcione.
Usar range.setValues, es la mejor opción. Funciona para cualquier rango en cualquier hoja, en la medida en que el rango de origen y destino sea similar.
Aquí está un ejemplo de código:
function openCSV() {
//Buscamos el archivo
var files = DriveApp.getFilesByName("ts.csv");
//Cada nombre de archivo es unico, por eso next() lo devuelve.
var file = files.next();
fileID = file.getId();
//Abrimos la spreadsheet, seleccionamos la hoja
var spreadsheet = SpreadsheetApp.openById(fileID);
var sheet = spreadsheet.getSheets()[0];
//Seleccionamos el rango
var range = sheet.getRange("A1:F1");
values = range.getValues();
//Guardamos un log del rango
//Logger.log(values);
//Seleccionamos la hoja de destino, que es la activeSheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var SSsheet = ss.getSheets()[0];
//Seleccionamos el mismo rango y le asignamos los valores
var ssRange = SSsheet.getRange("A1:F1");
ssRange.setValues(values);
}
- 1. ¿Cómo agrego fórmulas a la hoja de cálculo de Google con Google Apps Script?
- 2. ¿Cómo recuperar el ID de una hoja de cálculo de Google a través de Google Apps Script?
- 3. Google hoja de cálculo de formato condicional de hoja de cálculo
- 4. ¿Cómo obtengo el valor de una celda adyacente usando Google Script en una hoja de cálculo de Google?
- 5. Cómo agregar encabezado en la hoja de cálculo de Google
- 6. Cómo usar RegExReplace en la hoja de cálculo de Google
- 7. Copie una hoja de cálculo de Google Docs con Google .NET API
- 8. Hoja de cálculo de Google: SUMAR con FIND como criterio
- 9. Fórmula de hoja de cálculo de Google para obtener el último valor en una fila
- 10. Descargar hoja de cálculo de Google no publicada como CSV
- 11. Formulario de hoja de cálculo de Google, rellenar opciones de formulario basadas en una hoja de cálculo
- 12. ¿Cómo acceder a los datos en diferentes hojas de cálculo de Google a través de Google Apps Script?
- 13. Crear nueva hoja de cálculo (API Google/Python)
- 14. hoja de cálculo de Google obtener valor de celda con índice de fila y columna
- 15. Copie una hoja de cálculo completa en una nueva hoja de cálculo en Excel 2010
- 16. Google Script de la aplicación/Hoja de cálculo: cómo obtener los criterios de filtro?
- 17. ¿Puedo generar un archivo desde el script de hoja de cálculo de Google?
- 18. Script de la hoja de cálculo de Google establece el valor de la celda
- 19. Usando Android para enviar a un Formulario de hoja de cálculo de Google
- 20. SUMAR.SI.CONJUNTO de cálculo de Google
- 21. Actualizando de forma programada una hoja de cálculo alojada en documentos de Google
- 22. tabla dinámica a una hoja de cálculo Google, a través de la API
- 23. Hoja de cálculo - Google App Script [función de división de secuencia]
- 24. Agregar imágenes al documento de Google a través de Google Apps Script
- 25. Escribir en la hoja de cálculo de Google Docs usando PHP
- 26. ¿Es posible importar ImportRange en Google Apps Script?
- 27. ¿Cómo creo la primera línea en una nueva hoja de cálculo de Google con la API?
- 28. getRange con rango de nombre hoja de cálculo de google usando scripts
- 29. personalizada Google Función de hoja de cálculo Volviendo un hipervínculo o una fórmula existente
- 30. ¿Recuperar datos de la hoja de cálculo pública de Google usando la biblioteca gdata?
Esta falla con un mensaje de error que las dos cadenas tienen que estar en la misma hoja de cálculo. – Josh
Lo siento, @Josh. Pueden haber cambiado cómo funciona copyTo() después de que escribí esa respuesta (estoy bastante seguro de que lo probé y copié las líneas js directamente de mi documento de prueba). Una de las otras respuestas probablemente funcionará mejor. Sin realmente * intentar * ninguno de ellos, mi apuesta es que [la respuesta de ubique] (http://stackoverflow.com/a/11676703/23866) funcionará. –
Debe eliminar o corregir su respuesta para evitar que los usuarios pierdan su tiempo – Developer