2016-10-18 6 views
0

2d配列をGoogleスクリプトで使用してスプレッドシートの範囲にプッシュするにはどうすればよいですか?2d配列をスプレッドシートに移動

は、その配列が作成され、満たされていると仮定して6000+行4列があります。ここでは

は私が持っているものです。

次のコードは、誤った範囲エラーを示しています。

不正範囲幅が0であったが、4(ライン56、ファイル「コード」)であるべきである:データセットが大きすぎるため

formatted.getRange(1,1,targetArray.length,targetArray[0].length).setValues(targetArray);

次のコード機能が、タイムアウト:

for(var i=0; i<formattedSheetLength; i++) 
    formatted.getRange(i+1, 1, 1, 4).setValues([targetArray[i]]); 

答えて

1

編集注:OPコメントのため、元のコードが変更されました。

短い答え

function myFunction() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    // Create a jagged array for demonstration purposes 
    var targetArray = [ 
    [1,2], 
    [1], 
    [1,2,3], 
    [1] 
    ]; 

    /** 
    * These two loops are safe because they don't make calls to 
    * the SpreadsheetApp service. 
    */ 

    var height = targetArray.length; 
    //Check the max width. 
    var width = 0; 
    for(var i = 0; i < height; i++){ 
    width = Math.max(width,targetArray[i].length); 
    } 
    //Add the required empty values to convert the jagged array to a 2D array 
    var temp; 
    for(var i = 0; i < height; i++){ 
    temp = targetArray[i].length; 
    for(var j = 0; j < width - temp; j++){ 
     targetArray[i].push(''); 
    } 
    } 
    /** 
    * Send values to the spreadsheet in a single call 
    */ 
    var range = sheet.getRange(1,1,height,width).setValues(targetArray); 
} 

説明

しようとすると、エラーメッセージによると、targetArray[0].length0を返しています。 targetArrayは、2D配列の代わりにジグザグ配列であると仮定できます。ハードコーディングされた幅の使用を避けるため、ギザギザの配列を2D配列に変換する方法の例として、上記のコードを使用します。

コードには、Google Apps Scriptサービスを呼び出さないため安全に使用できる2つのループがあります。

+0

私はテスト目的でこれを試しましたが、それは違いはありませんでした。私は通常、4のような値をハードコードしたいのではありません。その値がデータ構造内で変化する可能性があるからです。 targetArray [0] .lengthは、内部配列の長さが変更された場合にプログラムがそれを処理できるようにします。 –

+0

@SergeInsas:申し訳ありませんが、編集が完了する前に誤って保存しました。 –

+1

心配しないで、私はちょうどそれを見ただけで、あなたは単に「何か」に気を散らしていましたが、私がそこにいたときから私はそれをやったからです! –