2016-09-19 15 views
0

dataMapEN - >var dataMapEN = {}というオブジェクトがあります。アドワーズスクリプトからGoogleスプレッドシート

このオブジェクトには、30000エントリがあります。私は次のコードを使用してGoogleスプレッドシートに書き込むしようとしています
:私は見ています何

var sheet = ss.getSheetByName("EN"); 
populateSheet(sheet, dataMapEN); 

function populateSheet(sheet, dataSource){ 
    for(item in dataSource){ 

    sheet.appendRow([item, dataSource[item].clicks, dataSource[item].impressions, dataSource[item].cost, dataSource[item].conversionValue, dataSource[item].conversions]); 

    } 
} 

スクリプトは約2分かかり200個のエントリを書くことということです。
シートに書き込むたびにスクリプトがタイムアウトします。

30分のウィンドウでスクリプトが終了するように、シートに書き込む方が速いのですか?

ありがとうございます。

答えて

1

スプレッドシートに30kの書き込み呼び出しを行っているため、スクリプトが非常に遅いです。
最初にすべてを2次元配列に入れてから、1回だけ呼び出してみてください。
このような何か(無たとえばので、テストされていません):

var sheet = ss.getSheetByName("EN"); 
populateSheet(sheet, dataMapEN); 

function populateSheet(sheet, dataSource){ 
    var dataToWrite = dataSource.map(funtion(row, item) { 
     return [item, row.clicks, row.impressions, row.cost, row.conversionValue, row.conversions]; 
    }); 

    sheet.getRange(sheet.getLastRow(), 1, dataToWrite.length, dataToWrite[0].length).setValues(dataToWrite); 
} 

あなたのデータは実際のオブジェクトのオブジェクトではなく、オブジェクトの配列である場合Object.keys(dataSource)を反復処理するとdataSource[key].clicksを返すなど

あなたは実行することができます1つの行に書き込むにはあまりにも多くのデータが存在する危険にさらされるので、1k行のバルクまたはそのようなものを書きたいと思うかもしれません。

関連する問題