使用Google Apps脚本删除或替换Google表格单元中的“未定义”字符串

时间:2019-10-18 15:42:22

标签: google-apps-script google-sheets

我的Google Apps ScriptHTML form接收数据。如果未选择checkbox中的radiofieldset按钮,则会在单元格中显示undefined字符串,如下所示:

"undefined" string in a cell


如何使用Google Apps脚本删除或替换单元格中的"undefined"字符串?


这是我的Google Apps Script代码的相关部分,该部分接收form数据,然后将其写入Sheet

var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
var nextRow = sheet.getLastRow() + 1

var newRow = headers.map(function(header) {
  if (typeof e.parameters[header] !== "undefined") {
    return header === "Date" ? new Date() : e.parameters[header].join(", ")
  } else {
    return header === "Date" ? new Date() : e.parameters[header]
  }
})

sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])

1 个答案:

答案 0 :(得分:1)

我创建了以下内容,试图在您的代码段周围重新创建上下文,以简化minimal, reproducible example

我在headers.map()中编辑了内联函数,以实现我认为您要实现的目标。

逻辑如下:

  • 如果该值未定义且字段名为“ Date”,则返回一个新的Date()对象。
  • 如果该值未定义并且该字段未命名为“ Date”,则返回一个空 字符串。
  • 如果该值已定义且为数组,则返回通过连接值创建的字符串。
  • 如果该值已定义且不是数组,则返回该值。

在您的原始代码段中,如果该值不是数组,它将尝试调用join()并失败。

var VALUES = [
  {
    'Foobar': ['Foo', 'Bar', 'Baz'],
    'Xyzzy': ['Quux'],
    'Name': ['Jane Doe'],
  },
  {
    'Foobar': ['Foo', 'Bar', 'Baz'],
    'Xyzzy': undefined,
    'Name': ['Peter Pan'],
  },
];

function populateCells() {
  var sheet = SpreadsheetApp.getActiveSheet();

  for (var i = 0; i < VALUES.length; i++) {
    var e = {parameters: VALUES[i]};

    /** EDITED VERSION OF YOUR CODE SNIPPET STARTS HERE **/

    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    var nextRow = sheet.getLastRow() + 1;

    var newRow = headers.map(function(header) {
      if (typeof e.parameters[header] === 'undefined') {
        return header === 'Date' ? new Date : '';
      }

      if (Array.isArray(e.parameters[header])) {
        return e.parameters[header].join(', ')
      } else {
        return e.parameters[header]
      }
    })

    sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]);

    /** EDITED VERSION OF YOUR CODE SNIPPET ENDS HERE **/
  }
}