2016-08-16 35 views
0

別の既存のシートに追加される同じサイズの別の範囲に22列、300行の範囲をコピーする必要があります。範囲の幅が正しくありません - Google Apps Script

これを実行しようとすると、「不正な範囲幅は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の行にとどまりますが、あなたの列はさらに長く伸びます。

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行を追加するために探している場合

また、(長さ、ませ幅を広げる)、このコードを使用します幅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またはacceptを使用します。 – MasterCrander

関連する問題