2016-08-16 46 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