2016-08-16 70 views
0

我需要将22列300行中的一个范围复制到另一个相同大小的范围内,并将其添加到另一个现有工作表。不正确的范围宽度 - Google Apps脚本

当我试图做到这一点时,我收到错误,“不正确的范围宽度,是22,但应该是44”。我一直没有成功使这个范围相匹配。

var sourceRange = ss1.getRange(1, 1, 300, 22); 
    var sourceValues = sourceRange.getValues(); 
    var archiveRange = ss3.getRange(1, ss3.getLastColumn()+1,300,ss3.getLastColumn()+22); 
    archiveRange.setValues(sourceValues); 

回答

0

您所使用的计算公式为.getRange(row, column, numRows, numColumns) ,所以你不必写:

var archiveRange = ss3.getRange(1, ss3.getLastColumn()+1,300,ss3.getLastColumn()+22); 
    archiveRange.setValues(sourceValues); 

但:

var archiveRange = ss3.getRange(1, ss3.getLastColumn()+1,300,22); 
    archiveRange.setValues(sourceValues); 
+0

非常感谢您的信息!我读的最后一个参数是“列号”而不是“列数”。这固定了它。 –

0

.getLastColumn()返回最后一列的整数的方法您的工作表目前有。如果你的工作表有10列,.getLastColumn()将返回10.

你有几个潜在的选择,你要求。第一种,如下所示,是您希望在工作表右端追加新的范围。定义变量并以最基本的形式调用它们,而不是在其他方法中定义它们也是一个明智的想法。这种做法将减少错误并澄清您的代码。

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
var sourceRange = ss1.getRange(1, 1, 300, 22); 
var sourceValues = sourceRange.getValues(); 
var ss3 = spreadsheet.getSheetByName("ss3"); 
var lastColumn = ss3.getLastColumn(); 
var archiveRange = ss3.getRange(1, lastColumn + 1, 300, 22); //Start at first row, the next column after the last one, for 300 rows and 22 columns. 
archiveRange.setValues(sourceValues); 

以上代码将在您的工作表右侧添加22列和300行。无论您运行多少次,您的工作表都会保留300行,但是您的专栏将会进一步延伸。

或者,如果你正在寻找使用相同的22列在您的片材的底部追加300行(延伸长度,NOT宽度),使用以下代码:

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
var sourceRange = ss1.getRange(1, 1, 300, 22); 
var sourceValues = sourceRange.getValues(); 
var ss3 = spreadsheet.getSheetByName("ss3"); 
var lastColumn = ss3.getLastColumn(); 
var lastRow = ss3.getLastRow(); 
var archiveRange = ss3.getRange(lastRow + 1, 1, 300, 22); //Start at the next row after the last, the first column, for 300 rows and 22 columns. 
archiveRange.setValues(sourceValues); 

这将保持宽度为22行,并将长度延长300行。

如果您正在寻找这样,只存在1归档完全覆盖以前的数据,使用:

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
var sourceRange = ss1.getRange(1, 1, 300, 22); 
var sourceValues = sourceRange.getValues(); 
var ss3 = spreadsheet.getSheetByName("ss3"); 
var archiveRange = ss3.getRange(1, 1, 300, 22); 
archiveRange.setValues(sourceValues); 

正如您可以猜到,它可以使这个范围300行,22列。您的数据将被覆盖,而不会添加长度或宽度。

您可能需要测试可能尚不存在的GAS可能有效且准确的.getRange()。如果您在添加行/列时看到错误,那么可以使用类似于.insertColumnsAfter().insertRowsAfter()之前的方法在之前将值写入这些新范围。关于表单方法的文档可以在here找到。

+0

非常感谢您的信息!这应该有很多帮助。 –

+0

如果这提供了答案或有用的信息,upvote或接受为其他人找到的答案。 – MasterCrander