如何使用url Get请求发送数组?

时间:2018-08-30 12:02:31

标签: javascript google-apps-script

我正在尝试通过使用url的Get请求发送数组,以在Google电子表格中发送值,例如:     exec?t = 1&t = 2&t = 3&v = 2&v = 5&v = 6

我只为一个值编码了GAS,并且可以正常工作:

    function doGet(e) { 
     Logger.log( JSON.stringify(e) );  // view parameters
     var result = 'Ok'; // assume success
     if (e.parameter == 'undefined') {
      result = 'No Parameters';
     }
    else {
     var sheet_id = '11xswr-tkuf-eb7MuN1SuTPLW44N5Up0AbCPEFMZDqS1';         // Spreadsheet ID
    var sheet = SpreadsheetApp.openById(sheet_id).getActiveSheet();     
    var newRow = sheet.getLastRow() + 1;                        
    var rowData = [];

    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 'v': //Parameter
          rowData[1] = value; //Value in column B
          result = 'Written on column B';
          break;
        case 't':
          rowData[0]=value; // Value in Column A
          result='Written on column A';
          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 :(得分:0)

我无法测试您的代码,但我想我知道您的问题出在哪里。

您将rowData存储为单层数组,仅更改插槽0和1的值。我的建议是将数据存储为双层数组,其中每个单元格包含它自己的数组,其中包含列的值。以下是一些示例代码,可作为参考:

var rowData = [[],[]];

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 'v': //Parameter
      rowData[1].push(value); //Value in column B
      result = 'Written on column B';
      break;
    case 't':
      rowData[0].push(value); // Value in Column A
      result='Written on column A';
      break;
    default:
      result = "unsupported parameter";
  }
}

很抱歉,我无法清楚地了解您要如何显示数据,但是如果您想在单个单元格中显示每个值列表,则可以采用以下解决方案:

//to write a new row

sheet.getRange(newRow,1,1,rowData.length).setValues(makeDisplay(rowData));

function makeDisplay(data){
  var newDisp=[[]];
for(var i=0;i<data.length;i++){
  var arrToStr="";
  for(var j=0;j<data[i].length;j++){
    arrToStr+=data[i][j]+"\n";
  }
  newDisp[0].push(arrToStr);
}
Logger.log(newDisp);
return newDisp;

}

此代码绝对可以优化,但我希望我对您如何成功完成任务有所了解。