对于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()
;没有运气。有人可以帮帮我吗。谢谢:))
答案 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
值为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.
文档说:
值表示动态类型的值,可以是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;
}