首页 > 解决方案 > 使用 Google Apps 脚本删除或替换 Google 表格单元格中的“未定义”字符串

问题描述

Google Apps Script从一个HTML form. 如果a 中的checkboxradio按钮fieldset未被选中,则undefined字符串将显示在单元格中,如下所示:


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


这是我的Google Apps Script代码的相关部分,它接收然后将form数据写入 a 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])

标签: google-apps-scriptgoogle-sheets

解决方案


我创建了以下内容,试图围绕您的代码片段重新创建上下文,以促进最小的、可重现的示例

我在其中编辑了内联函数headers.map()以实现我认为您想要完成的任务。

逻辑如下:

  • 如果值未定义且字段名为“日期”,则返回一个新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 **/
  }
}

推荐阅读