融合表将从谷歌电子表格更新但不同步。并应避免重复

时间:2015-04-03 09:15:21

标签: google-apps-script google-sheets google-fusion-tables

要定期更新每日销售数据的Google电子表格,我们只需要在电子表格休息时间的任何给定时间点最多两个月的数据,需要在融合表中备份并从电子表格中删除。任何人都可以建议如何实现这一目标。由于授权问题,Google电子表格到融合表脚本无法正常工作。我不是剧本作家。 (增量备份的种类)

1 个答案:

答案 0 :(得分:0)

在查看代码后,我注意到您需要提供不太安全的电子邮件和密码,因此我对代码进行了一些更改,可能会对此有所帮助。

主要功能“updateFusion”我这样减少它:

function updateFusion()
{

 var query = '';
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var lastRow = ss.getLastRow();
 var lastCol = ss.getLastColumn();
 var range = ss.getActiveSheet().getRange(1,1,lastRow, lastCol);
 query = updateData(range, tableIDFusion) ;
 //FusionTables.Table
 var fusion = FusionTables.Query.sql(query);

 ss.deleteRows(2, lastRow-1);
}

基本上我已经摆脱了认证过程,因为appscript会处理这个问题。 现在我选择所有可用信息而不是预定义范围。 然后我调用函数“updateData”传递范围和表ID 我也修改了这个函数,我刚刚删除了选择范围的部分,调整了代码以创建正确的查询并在连接后返回查询。

function updateData(range, tableID) {


    var data = range.getValues();

    // format data
    for (var i in data) {
        for (var j in data[i]) {
            if (isNaN(data[i][j])) {
                data[i][j] = data[i][j].replace(/'/g, "\\'");
            }
        }
    }

    var headers = data[0];
    //var queryPrepend = "INSERT INTO " + tableID + " (" + "\'" + headers.join("\',\'") + "\'" + ") VALUES ('";
    var queryPrepend = "INSERT INTO " + tableID + " ('" + headers.join("','") + "') VALUES ('";
    var query = "";

    for (var i = 1; i < data.length; ++i) {
       if (typeof (data[i][0]) == "string" && data[i][0] == "") {
           continue;
       }

   query += queryPrepend + data[i].join("','") + "'); ";

    }

    return query;   
};

创建插入新数据的查询后,我调用FusionTable服务然后

var fusion = FusionTables.Query.sql(query);

此服务负责身份验证。 之后脚本将删除用于将值插入表的行,我建议您先测试此脚本。

为了使这个脚本能够工作,您必须与将要使用它的人共享工作表和融合表。 此外,您需要激活此documentation中提及的FusionTable服务。

我知道有很多事情要做,但我希望这会有所帮助。