2016-06-15 4 views
2

長さが異なるが連続する縦のセルの間に空白がないデータのあるGoogleシートがあるとします。私は私のスプレッドシートのgetValues()メソッドへの呼び出しを1つだけとしようとしています。たとえば、最初のカラムについては、すべてのカラムに対してこのようにしたいと思います。次のコードはエディタで実行するのが非常に遅いです:スプレッドシートの列から配列を取り込むための最速の方法

function myFunction() { 
    var InfoSheetIterator = DriveApp.getFilesByName("InfoSheets"); 
    var InfoSheetFile = InfoSheetIterator.next(); 
    var InfoSheet = SpreadsheetApp.open(InfoSheetFile); 

    var DataRange = InfoSheet.getDataRange().getValues(); 
    var ChannelList = DataRange; 
    var ChannelListArray = new Array(); 
    var i = 0; 
    while (DataRange[i][0] != "" || DataRange[i][0] != undefined || DataRange[i][0] != null) { 
    ChannelListArray.push(DataRange[i][0]); 
    } 
    Logger.Log(ChannelListArray.toString()); 
} 

これを行う方法はありますか?私は最適化しようとしているので、あまりにも多くのgetValues()呼び出しを使用することに対して警告されています。この場合、DataRangeという名前のgetValues()によって返される配列は、DataRange [0]が最初の行のすべての値を返すようなものですが、最初の列のすべての値が必要です。おそらく、私は単に列と行を反転することができますが、元のシートを大きくすると思います。

答えて

2

あなたがDataRange[0]を行うと、何を得ることは1行、配列の配列を持つ行列である:私は何をしたいことは、最初の列の値の平坦化された配列を取得することであると推測

DataRange[0] //=> [[value_row1], [value_row2], [value_row3], ...] 

[value_row1, value_row2, value_row3, ...] 

これは、flattenというユーティリティ関数を使用しています。 1次元配列の行列を変換します。ここでは、次のとおりです。

function flatten(matrix){ 
    return [].concat.apply([], matrix); 
} 

、あなたはこれを行う:

flatten(DataRange[0]) 

と、それは出力平坦化された列の値は以下となります。[val_row1, val_row2, val_row3, ...]

関連する問題