2016-09-19 3 views
0

У меня есть объект под названием dataMapEN ->var dataMapEN = {};adwords scripts to google spreadsheet

Этот объект имеет 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]); 

    } 
} 

Что я вижу в том, что писать 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 т.д.

Вы можете запустить в опасность того, что слишком много данных для записи за один раз, поэтому вы можете писать в массивах из 1 тыс. строк или что-то в этом роде.