2016-09-19 189 views
0

我有一個對象叫dataMapEN - >var dataMapEN = {};adwords腳本到谷歌電子表格

該對象擁有30000個條目。
我嘗試使用下面的代碼,並寫入到谷歌電子表格:

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]); 

    } 
} 

我所看到的是,寫200個條目的腳本大約需要2分鐘。
每次我寫入表單時,腳本都會超時。

是否有更快的方式寫入表單以便腳本在30分鐘窗口內完成?

謝謝

回答

1

你的腳本太慢了,因爲它正在做30k的寫電子表格的調用。
嘗試將所有內容都放入一個2d數組中,然後只進行一次調用。
像這樣的東西(不是因爲沒有例子測試):

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

您可能運行因爲太多的數據不能一次寫入,所以你可能想寫一大堆1k行或類似的東西。

相關問題