adwords脚本google电子表格

时间:2016-09-19 19:47:55

标签: google-apps-script google-sheets

我有一个名为dataMapEN的对象 - > var dataMapEN = {};

此对象有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 个答案:

答案 0 :(得分:1)

你的脚本太慢了,因为它正在对电子表格进行30k写入调用 尝试先将所有内容放入二维数组,然后只进行一次调用 这样的事情(没有测试,因为没有例子):

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行或类似的东西来写。