我正在尝试通过检查键列“O”将行从一个工作表复制到另一个工作表。
function keyPush(){
var thisSheet = SpreadsheetApp.openById('##');
var origSheet = thisSheet.getSheetByName('original');
var origLastRow = origSheet.getLastRow();
var newSheet= thisSheet.getSheetByName('copy');
var tkhLastRow = newSheet.getLastRow();
var keyCol = 'O';
var key = origSheet.getRange(keyCol+'2:'+keyCol+origLastRow).getValues();
for(var row=key.length-1;row>1;row--){
if( origSheet.getRange('O'+row) != 'done' )
{
var orig = origSheet.getRange('A'+row+':N'+row);
var dest = newSheet.getRange('C'+tkhLastRow+':P'+tkhLastRow);
orig.copyTo(dest,{contentOnly:true});
origSheet.getRange('O'+row).setValue('done');
}
}
}
我错过了一个循环或其他东西,因为我可以看到在新工作表上迭代的行。我需要它只将未标记为已完成的行复制到新工作表中。现在它将origSheet中的所有行推送到newSheet的同一行,这就是我可以看到它的原因。
答案 0 :(得分:1)
如果对任何人都有帮助,这是工作代码。
function pushRow(){
var thisSheet = SpreadsheetApp.openById('##');
var origSheet = thisSheet.getSheetByName('original');
var origLastRow = origSheet.getLastRow();
var tkhContacts = thisSheet.getSheetByName('contacts');
var keyCol = 'O';
var keys = origSheet.getRange(keyCol+'2:'+keyCol+origLastRow);
var keyRow = keys.getRow();
for(var row=origLastRow;row>1;row--){
if( origSheet.getRange(keyCol+row).getValue().trim() != 'done' )
{
var orig = origSheet.getRange('A'+row+':N'+row).getValues();
tkhContacts.appendRow(
[ '','',orig[0][0],orig[0][1],orig[0][2],orig[0][3],orig[0][4],orig[0][5],orig[0][6],orig[0][7],orig[0][8],orig[0][9],orig[0][10],orig[0][11],orig[0][12],orig[0][13],'','','' ] )
origSheet.getRange(keyCol+row).setValue('done');
}
}
}
答案 1 :(得分:0)
您忘记从newSheet的最后一行获取新值,因此每次都会将其放在同一行。这是一个修正
function keyPush(){
var thisSheet = SpreadsheetApp.openById('##');
var origSheet = thisSheet.getSheetByName('original');
var origLastRow = origSheet.getLastRow();
var newSheet= thisSheet.getSheetByName('copy');
var tkhLastRow = newSheet.getLastRow();
var keyCol = 'O';
var key = origSheet.getRange(keyCol+'2:'+keyCol+origLastRow).getValues();
for(var row=key.length-1;row>1;row--){
if( origSheet.getRange('O'+row) != 'done' )
{
tkhLastRow = newSheet.getLastRow();
var orig = origSheet.getRange('A'+row+':N'+row);
var dest = newSheet.getRange('C'+tkhLastRow+':P'+tkhLastRow);
orig.copyTo(dest,{contentOnly:true});
origSheet.getRange('O'+row).setValue('done');
}
}
}
另外,你应该考虑使用原子的apprendRow(content) method并避免每次写一些数据时得到最后一行的新值这样的问题。