appendRow retorna [Ljava.lang.Object; @ em vez de valores
Desejo copiar os envios do formulário para uma planilha diferente para que os dados copiados possam ser editados sem afetar os envios originais.
Eu tenho o seguinte 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 nullem appendRowajuda a mover as informações para a próxima coluna. No entanto, não funciona muito bem com o row[0]array. Se eu remover o, nullele funcionará bem, mas quero que as informações sejam copiadas em uma coluna diferente da primeira.
Respostas
Explicação:
- A abordagem de uso
nullé claramente uma solução alternativa e não uma solução à prova de futuro. Ou seja, se você quiser começar a colar a partir da coluna 4, terá que fazer o[null,null,null,...row[0]]que não é a maneira correta de fazer isso, na minha opinião. - Aconselho você a se livrar de
appendRowe,nulluma vez que deseja colar os dados da segunda coluna em diante. Portanto, use emsetValues()vez disso.
Substituir:
tracker.appendRow([null,row[0]]);
com:
tracker.getRange(tracker.getLastRow()+1,2,1,row[0].length).setValues(row);
Solução 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 que Ljava.lang.Object?
Porque você está usando o tempo de execução Rhino mais antigo que foi escrito em Java. Portanto, quando algo inesperado acontece, você tem um vislumbre da infraestrutura em que o GAS foi construído. Agora, java.lang.objecté uma classe base em Java da qual outros objetos, incluindo arrays, são derivados.
Como o appendRowúnico parâmetro da assinatura do método aceita uma matriz unidimensional de valores, seu row[0], que contém uma matriz (veja o que o getvaluesmétodo retorna), foi para a planilha como uma tag de string indicando que era um objeto em tempo de execução.
O que fazer no Rhino?
Todas as soluções dependem de tomar [ null ]como sua matriz de base e usar concatpara anexar o resto da primeira linha, algo como isto: [ null ].concat(row[0]). Você também pode usar pushcom um forloop simples para melhor desempenho.
O que fazer no V8 0 ?
Como a outra resposta mencionada, sua melhor aposta é a sintaxe de propagação . Você também pode fazer um push(...row[0])para evitar a concatenação de arrays (já que você usa e descarta imediatamente a cópia resultante [ null, ...row[0] ]).
0 Veja os documentos oficiais sobre como migrar para o V8 para aproveitar as vantagens dos novos recursos de idioma e velocidade aprimorada.
A rowvariável contém um array, então você deve usar o operador spread comappendRow
Substituir:
tracker.appendRow([null,row[0]]);
com:
tracker.appendRow([null,...row[0]]);
Certifique-se de que seu projeto esteja habilitado para o tempo de execução do Chrome V8.