2013-07-01 38 views
0

我想从一个工作表复制行到另一个使用谷歌sciprt的spreadhsheet,但同样不工作。谷歌脚本:如何从一个工作表复制到另一个电子表格

请你能帮我解释一下怎么做这个作品吗?

function CopyRows() { 
    var source = SpreadsheetApp.openById('XXXXXX'); 
    var sourcesheet = source.getSheetByName('sheet1'); 

    var target = SpreadsheetApp.openById('YYYYY') 
    var targetsheet = target.getSheetByName('sheet1'); 
    var targetrange = targetsheet.getRange(targetsheet.getLastRow() + 1 , 1); 
    sourcesheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()).copyTo(targetrange); 

    } 

您是否知道是否存在将行从一张纸复制到其他电子表格中的另一张纸?

问候


编辑:2013年1月7日

感谢PhysLabTsar,你的脚本都非常好,从一个片到其他电子表格copyrows。

function myFunction() { 
    var source = SpreadsheetApp.openById('xxxxxx'); 
     var sourcesheet = source.getSheetByName('sheet1'); 

     var target = SpreadsheetApp.openById('xxxxx') 
     var targetsheet = target.getSheetByName('sheet1'); 
var targetrange = targetsheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()); 
     var rangeValues = sourcesheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()).getValues(); 
     targetrange.setValues(rangeValues); 

}


编辑:CopyRows从倍数表

function ShellCopyValues(){ 
    var sheets = ['sheet1','sheet2','sheet3','sheet4','sheet4']; 
    for (var s in sheets){ 
    CopyRows(sheets[s]); 
    } 
    } 

    function CopyRows(uname) { 
    var source = SpreadsheetApp.openById('XXXXXX'); 
     var sourcesheet = source.getSheetByName(uname); 

     var target = SpreadsheetApp.openById('YYYYYY') 
     var targetsheet = target.getSheetByName(uname); 
     var targetrange = targetsheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()); 
     var rangeValues = sourcesheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()).getValues(); 
     targetrange.setValues(rangeValues); 

    } 

如果任何人有这样做一个最好的办法。请不要让我知道。

最好的问候,

回答

2

我相信你的问题是copyTo()方法。这只有在目标位于同一电子表格中时才有效。要解决此问题,您可以从initial电子表格中获取所需的范围,并使用getValues()将它们存储在对象ARRAY中。然后打开你的final电子表格并获取相同的尺寸范围,并使用setValues()转储它们。 final范围的大小必须与initial范围的大小相匹配。

这是应该的工作:

function myFunction() { 
    var source = SpreadsheetApp.openById('xxxxxx'); 
    var sourcesheet = source.getSheetByName('sheet1'); 

    var target = SpreadsheetApp.openById('xxxxx') 
    var targetsheet = target.getSheetByName('sheet1'); 
    var targetrange = targetsheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()); 
    var rangeValues = sourcesheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()).getValues(); 
    targetrange.setValues(rangeValues); 

} 

我希望这有助于。这是我在这个地方的第一个答案,所以我确信有其他人知道的更好的方法。但这是我一直在使用的方式。 :)

+0

您可以在使用'setValues()'方法后在'final'电子表格中抵销值。重要的部分是'final'范围的尺寸,或者在您的情况下'targetrange',必须与'rangeValues'尺寸相匹配。 – PhysLabTsar

+0

非常感谢...现在正在工作....我怎样才能让这个工作多重表。我的意思是复制工作表1到工作表1,工作表2到工作表2,工作表3到工作表3 ...... –

+0

谢谢....我找到了从复制工作表复制的方式 –

相关问题