通过谷歌脚本在谷歌电子表格中填写多行

时间:2016-11-25 11:30:04

标签: google-apps-script google-sheets arduino

我目前正在为我的大学开设一个学期项目,我们希望将数据从Arduino记录到Google表格。

我正在关注我可以在Google上找到的众多教程和示例,它到目前为止工作真的很好。我的Arduino能够将数据上传到所述电子表格。

不幸的是,所有这些示例总是只处理要填充的一行。对于我们的项目,我们希望同时填充2或3行。

我将很快展示到目前为止我所做的事情,也许你可以帮助我解决我的(可能很容易的)问题。

  • 我创建了一个谷歌电子表格,我想在其中记录我的数据
  • 我使用了应该填充一行的教程中的脚本。
  • 在浏览器中输入以下行格https://script.google.com/macros/s/<gscript id>/exec?tempData=datahere
    我现在可以在网址末尾输入我的数据第一行。

但是,当我想要填充表格的两三行时,我现在该如何进步?我说代码的作者已经实现了填充第三行的选项,但是我无法在我的网址中找到输入内容然后用数据填充它。

我尝试编写类似

的所有内容
https://script.google.com/macros/s/<gscript id>/exec?tempData=datahere&tempData1=value2

刚刚以书面形式结束

datahere&tempData1=value2

在我的第一行,未将datahere填入第一行,value2填入第二行。

如何提供和写入多行数据?

此脚本中的代码为:

/*
GET request query:
https://script.google.com/macros/s/<gscript id>/exec?tempData=data_here
*/
/* Using spreadsheet API */
function doGet(e) { 
    Logger.log( JSON.stringify(e) );  // view parameters
    var result = 'Ok'; // assume success

    if (e.parameter == undefined) {
        result = 'No Parameters';
    }
    else {
        var id = '<ssheet id>'; // Spreadsheet ID
        var sheet = SpreadsheetApp.openById(id).getActiveSheet();
        var newRow = sheet.getLastRow() + 1;
        var rowData = [];
        //var waktu = new Date();
        rowData[0] = new Date(); // Timestamp in column A
        for (var param in e.parameter) {
            Logger.log('In for loop, param='+param);
            var value = stripQuotes(e.parameter[param]);
            //Logger.log(param + ':' + e.parameter[param]);
            switch (param) {
                case 'tempData': //Parameter
                    rowData[1] = value; //Value in column B
                    break;
                case 'tempData1':
                    rowData[2] = value; //Value in column C
                    break;
                default:
                    result = "unsupported parameter";
            }
        }
        Logger.log(JSON.stringify(rowData));

        // Write new row below
        var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
        newRange.setValues([rowData]);
    }
    // Return result of operation
    return ContentService.createTextOutput(result);
}

/**
 * Remove leading and trailing single or double quotes
 */
function stripQuotes( value ) {
    return value.replace(/^["']|['"]$/g, "");
}

1 个答案:

答案 0 :(得分:1)

我建议如下:

  1. 创建您希望写入电子表格的数据的二维数组。如果Arduino上的客户端使用的是JavaScript,则可能如下所示:

    var data = [
      ["row1value1", "row1value2"],
      ["row2value1", "row2value2"]
    ];
    
  2. 将此转换为JSON,再次在JavaScript中可能如下所示:

    var json = JSON.stringify(data);
    

    这为您提供了数组的字符串表示。

  3. 现在使用此数据发出请求。我建议你应该使用doPost代替doGet,因为你要将数据发送到更新状态的电子表格。但是,为了使某些工作正常,您的网址将如下所示:

    https://script.google.com/<.....>/exec?myarray=<stringified JSON>
    
  4. 在应用脚本中,在doGet中(再次考虑使用doPost),您可以使用:

    // Get the JSON representation of the array:
    var json = e.parameter.myarray;
    // Convert back to 2d array
    var data = JSON.parse(json);
    
  5. 现在,您可以使用Range将此内容写入表单中的setValues,例如假设一个矩形的2d数组:

    sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
    
  6. 希望这有帮助