首页 > 解决方案 > 谷歌应用脚​​本将范围从谷歌工作表剪切并粘贴到另一个谷歌工作表

问题描述

我正在尝试编写一个脚本,该脚本从谷歌电子表格中剪切一个范围并将其粘贴到另一个电子表格中。只要源工作表是我文档中的第一张工作表,该脚本就可以正常工作。如何修复它以便脚本抓取正确的工作表,无论它在我的文档中的什么位置?

我对此非常陌生,并且主要使用我在网上找到的代码。可能犯了一个非常明显的错误..

function CopyRangeTo_OtherSheet() {
 var sss = SpreadsheetApp.openById('1O1gML-IeOkx6n6RhCavay6Zg9zflalcVs0qkB2yu7bE'); 
 var ss = sss.getSheetByName('Sheet1'); 
 var range = ss.getRange(2,4,sss.getLastRow()-1,9); 
 var data = range.getValues();

 var tss = SpreadsheetApp.openById('1WHoETM3QxV166ndnPW4Qv37Y6SBGPVw-CcEQxNpw0Co'); 
 var ts = tss.getSheetByName('Sheet3'); 

 ts.getRange(ts.getLastRow()+1, 1,50,9).setValues(data); 

  var spread = SpreadsheetApp.openById('1O1gML-IeOkx6n6RhCavay6Zg9zflalcVs0qkB2yu7bE');
var sheet = spread.getSheetByName("Sheet1");
  sheet.getRange("D2:H").clearContent();

}


标签: google-apps-scriptgoogle-sheets

解决方案


您的行var ss = sss.getSheetByName('Sheet1');暗示您使用名称为 的工作表Sheet1

这是您用来从中获取并随后复制它们的values工作range表。

如果您想从不同的工作表复制/剪切和粘贴值,只需将工作表的正确名称粘贴到var ss = sss.getSheetByName('PASTE HERE THE NAME OF THE SHEET');

小注释:

如果要清除的范围与复制值的范围相同,则无需再次定义。您可以简单地替换行

var spread = SpreadsheetApp.openById('1O1gML-IeOkx6n6RhCavay6Zg9zflalcVs0qkB2yu7bE');
var sheet = spread.getSheetByName("Sheet1");  
sheet.getRange("D2:H").clearContent(); 

通过

range.clearContents(); 

另请注意:

setValues()仅当应设置值的范围与值范围(即原始范围)具有相同的维度时才有效。

如果您的原始范围是2,4,ss.getLastRow()-1,9,那么行ss.getLastRow()-1数和列数是9

因此,您需要定义

ts.getRange(ts.getLastRow()+1, 1,ss.getLastRow()-1,9).setValues(data); 

动态调整行号。


推荐阅读