appendRow devuelve [Ljava.lang.Object; @ en lugar de valores
Quiero copiar los envíos de formularios a una hoja diferente para que los datos copiados se puedan editar sin afectar los envíos originales.
Tengo el siguiente código:
function copy2(){
var responses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("from");
var tracker = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("to");
var lastrow = responses.getLastRow();
var col = responses.getLastColumn();
var row = responses.getRange(lastrow, 1, 1, col).getValues();
tracker.appendRow([null,row[0]]);
Usar nullen appendRowte ayuda a mover la información a la siguiente columna. Sin embargo, no funciona del todo con la row[0]matriz. Si elimino el null, funciona bien, pero quiero que la información se copie en una columna diferente a la primera.
Respuestas
Explicación:
- El enfoque de uso
nulles claramente una solución alternativa y no una solución a prueba de futuro. Es decir, si desea comenzar a pegar desde la columna 4, tendrá que hacer[null,null,null,...row[0]]lo que, en mi opinión, no es la forma correcta de hacerlo. - Le aconsejaría que se deshaga de
appendRowynullcomo desea pegar los datos de la segunda columna en adelante. Por lo tanto, utilicesetValues()en su lugar.
Reemplazar:
tracker.appendRow([null,row[0]]);
con:
tracker.getRange(tracker.getLastRow()+1,2,1,row[0].length).setValues(row);
Solución completa:
function copy2(){
var responses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("from");
var tracker = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("to");
var lastrow = responses.getLastRow();
var col = responses.getLastColumn();
var row = responses.getRange(lastrow, 1, 1, col).getValues();
tracker.getRange(tracker.getLastRow()+1,2,1,row[0].length).setValues(row);
}
¿Por qué Ljava.lang.Object?
Porque está utilizando el motor de ejecución de Rhino más antiguo que se escribió en Java. Por lo tanto, cuando sucede algo inesperado, puede vislumbrar la infraestructura sobre la que se basa GAS. Ahora, java.lang.objectes una clase base en Java de la que se derivan otros objetos, incluidas las matrices.
Dado que el appendRowúnico parámetro de la firma del método acepta una matriz unidimensional de valores, su row[0], que contiene una matriz (vea qué getvaluesmétodo devuelve), llegó a la hoja como una etiqueta de cadena que indica que se trataba de un objeto en tiempo de ejecución.
¿Qué hacer en Rhino?
Todas las soluciones dependen de tomar [ null ]como base de la matriz y el uso de concatañadir el resto de la primera fila, algo como esto: [ null ].concat(row[0]). También se puede utilizar pushcon un forbucle simple para un mejor rendimiento.
¿Qué hacer en V8 0 ?
Como mencionó la otra respuesta, su mejor opción es la sintaxis de propagación . También puede hacer una push(...row[0])para evitar la concatenación de matrices (ya que usa y descarta inmediatamente la copia resultante [ null, ...row[0] ]).
0 Consulte los documentos oficiales sobre cómo migrar a V8 para aprovechar las nuevas funciones de idioma y la velocidad mejorada.
La rowvariable contiene una matriz, por lo que debe usar el operador de propagación conappendRow
Reemplazar:
tracker.appendRow([null,row[0]]);
con:
tracker.appendRow([null,...row[0]]);
Asegúrese de que su proyecto esté habilitado para el tiempo de ejecución de Chrome V8.