在Google工作表脚本

时间:2017-07-08 04:28:44

标签: javascript casting google-sheets google-sheets-api

对于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;
}

该函数假定采用逗号分隔的单元格列表并返回所有名称的单个列表。

例如:

James
Reese, Peter
Ryan, Monica
Reba

Nick

应该产生

James
Reese
Peter
Ryan
Monica
Nick

但是我似乎遇到了将单元格值转换为字符串值的问题,并且它显示“执行自定义函数的内部错误”而没有给我任何更多细节那。以下更基本的程序按预期工作:

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();没有运气。有人可以帮帮我吗。谢谢:))

3 个答案:

答案 0 :(得分:0)

根据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

值为ListValuehttps://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.

文档说:

  

值表示动态类型的值,可以是null,数字,字符串,布尔值,递归结构值或值列表。预期价值生产者将设置其中一种变体,缺少任何变体都表示存在错误。

答案 1 :(得分:0)

查看此自定义函数是否有效:

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

在电子表格中输入

=namesSimple(A1:A20)

答案 2 :(得分:0)

问题在于嵌套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;
}