appendRow, değerler yerine [Ljava.lang.Object; @ döndürür
Kopyalanan verilerin orijinal gönderimleri etkilemeden düzenlenebilmesi için form gönderilerini farklı bir sayfaya kopyalamak istiyorum.
Takip koduna sahibim:
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]]);
Kullanılması nullhalinde appendRowbir sonraki sütuna üzerinde bilgi taşımak yardımcı olur. Ancak, row[0]dizide pek çalışmıyor . Kaldırırsam nulliyi çalışıyor, ancak bilgilerin birincisinden farklı bir sütuna kopyalanmasını istiyorum.
Yanıtlar
Açıklama:
- Kullanma yaklaşımı
nullaçık bir şekilde geçici bir çözümdür ve geleceğe yönelik bir çözüm değildir. Yani, 4. sütundan yapıştırmaya başlamak istiyorsanız, bunu yapmanın[null,null,null,...row[0]]doğru yolu olmadığını düşünüyorum. - Verileri ikinci sütundan itibaren yapıştırmak istediğinizden
appendRowve kurtulmanızı tavsiye ederim . Bu nedenle, bunun yerine kullanın.nullsetValues()
Değiştirin:
tracker.appendRow([null,row[0]]);
ile:
tracker.getRange(tracker.getLastRow()+1,2,1,row[0].length).setValues(row);
Tam çözüm:
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);
}
Neden Ljava.lang.Object?
Çünkü Java ile yazılmış eski Rhino çalışma zamanını kullanıyorsunuz. Bu nedenle, beklenmedik bir şey olduğunda, GAS'ın üzerine inşa edildiği altyapıya bir göz atarsınız. Şimdi, java.lang.objectJava'da diziler de dahil olmak üzere diğer nesnelerin türetildiği temel bir sınıftır.
Yana appendRowyöntem imzası tek parametre değerlerinin tek boyutlu bir dizi, sizin kabul row[0]dizisi içerir, (ne olduğunu görmek getvalues, bu çalışma zamanında bir nesne olduğunu belirten bir dize etiketi olarak levha için yapılmış yöntem döndürür).
Rhino'da ne yapmalı?
Tüm çözümler alarak bağlıdır [ null ]Baz dizi olarak kullanarak concatböyle birinci sıranın kalanı, bir şeyler eklemek için: [ null ].concat(row[0]). Daha iyi performans için pushbasit bir fordöngü ile de kullanabilirsiniz .
V8 0'da ne yapmalı ?
Diğer cevapta da belirtildiği gibi, en iyi bahsiniz yayılma sözdizimidir . Ayrıca push(...row[0]), dizilerin birleştirilmesini önlemek için bir de yapabilirsiniz (çünkü bundan kaynaklanan kopyayı hemen kullanır ve atarsınız [ null, ...row[0] ]).
0 Yeni dil özelliklerinden ve iyileştirilmiş hızdan yararlanmak için V8'e nasıl geçiş yapılacağına ilişkin resmi belgelere bakın .
rowBirlikte yayılmış operatörünü kullanması gereken böylece değişken bir dizi içerirappendRow
Değiştirin:
tracker.appendRow([null,row[0]]);
ile:
tracker.appendRow([null,...row[0]]);
Projenizin Chrome V8 çalışma zamanı için etkinleştirildiğinden emin olun.