在 google 工作表脚本中发布对字符串的转换

Issue casting to string in google sheets script

对于 google 张文档,我有以下 函数

function names(nameCells) {
  var roomieNames = new Array();
  for (i = 0; i < nameCells.length; i++) {
    var str = String(nameCells[i]);
    var splitted = str.split(", ");
    for (k = 0; splitted.length; i++) {
      roomieNames.push(splitted[i]);
    }
  }
  return roomieNames;
}

该函数应该获取名称以逗号分隔的单元格列表和 return 以及所有名称的单个列表。

例如:

James
Reese, Peter
Ryan, Monica
Reba

Nick

应该产生

James
Reese
Peter
Ryan
Monica
Nick

但是我似乎在将 单元格值 转换为 字符串值 时遇到了问题,它说 "Internal error executing the custom function" 没有给出我比那更具体。以下更基本的程序确实按预期工作:

function namesSimple(nameCells) {
  var roomieNames = new Array();
  for (i = 0; i < nameCells.length; i++) {
      roomieNames.push(nameCells[i]);
  }
  return roomieNames;
}

然而,以下内容会产生第 4 行注释中的错误:

function namesBroken(nameCells) {
  var roomieNames = new Array();
  for (i = 0; i < nameCells.length; i++) {
    var splitted = nameCells[i].split(", ");  //TypeError: Cannot find function split in object James. (line 4).
    for (k = 0; splitted.length; i++) {
      roomieNames.push(splitted[i]);
    }
  }
  return roomieNames;
}

这让我相信我需要将对象转换为字符串,但如上所述,这似乎也不起作用。

我尝试使用谷歌搜索铸造技术并认为这应该有效。我也试过了。toString();没有运气。有人可以帮帮我吗?谢谢:)

根据 api 文档 (https://developers.google.com/sheets/api/guides/values),单元格范围请求的响应作为 'ValueRange' 对象返回。

数据表示:

{
  "range": string,
  "majorDimension": enum(Dimension),
  "values": [
    array
  ],
}

https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values#resource-valuerange

值是 ListValue 的数组:https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.ListValue

ListValues 表示一个 Value 对象,它将具有以下值之一:(https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Value)

null_value  NullValue   Represents a null value.
number_value    double  Represents a double value.
string_value    string  Represents a string value.
bool_value  bool    Represents a boolean value.
struct_value    Struct  Represents a structured value.
list_value  ListValue   Represents a repeated Value.

文档说:

Value represents a dynamically typed value which can be either null, a number, a string, a boolean, a recursive struct value, or a list of values. A producer of value is expected to set one of that variants, absence of any variant indicates an error.

看看这个自定义函数是否有效:

function namesSimple(values) {
    return values.toString().split(",").map(function (r) {
        return r.trim();
    }).filter(String);
}

在您的电子表格中输入

=namesSimple(A1:A20)

问题在于嵌套的 for 循环(我需要使用任何 IDE 来捕捉这些错误)

function names(nameCells) {
  var roomieNames = new Array();
  for (i = 0; i < nameCells.length; i++) {
    var str = String(nameCells[i]);
    var splitted = str.split(", ");
    for (k = 0; splitted.length; i++) {  //should be for (k = 0; splitted.length; k++)
      roomieNames.push(splitted[i]);  //should be roomieNames.push(splitted[k])
    }
  }
  return roomieNames;
}