如何使 google 工作表函数将数组打印到单个单元格?
How to make google sheets function print an array to a single cell?
我有这个 google 应用程序脚本,它应该充当自定义函数,这意味着您可以通过键入 =
然后在 [=46 的单元格中输入函数名称来调用它=],然后提供传递给函数的输入值。然后在脚本中使用 return
将输出发送回单元格。
下面的代码是概念验证。它只需要一个电子邮件地址数组并循环遍历它,将任何不包含给定子字符串(在本例中为“yahoo.com”)的地址推回到数组 array
,然后是 return
编辑。此脚本按预期工作。
function test_no_sheet()
{
var message_objs = ['grgrhargr@gmail.com','rgtgtgt@yahoo.com','asseeff@gmail.com','dfsdfds@yahoo.com','mlamson@yahoo.com','dfdfdfdeffesa@yahoo.com','dffhyynhnyfnd@yahoo.com'];
var array = [];
for (var i = 0; i < message_objs.length; i++) {
if (!message_objs[i].includes("yahoo.com")){array.push(message_objs[i])} else {continue}
console.log(message_objs[i]);
console.log("test" + array)
//Do something
}
return array
}
当我尝试使用单元格中包含的数组作为输入时出现问题。证明脚本的 sheet 函数适配只是简单地更改为将 input
参数传递给 message_objs.
function test_yes_sheet(input)
{
var message_objs = input
var array = [];
for (var i = 0; i < message_objs.length; i++) {
if (!message_objs[i].includes("yahoo.com")){array.push(message_objs[i])} else {continue}
console.log(message_objs[i]);
console.log("test" + array)
//Do something
}
return array
}
我提供了一个 publicly available sheet 来演示这个问题(我相信您也可以在 extensions 下访问底层的 google 应用程序脚本)。基本上当 sheet returns 数组时,它 post 将这个可怕的垃圾列表发送到目标单元格,它显然只是简单地获取输入数组,分隔每个字符,并且 posts 中的每个字符到 sheet 中的一个新行。我希望它只是 post 循环输出 array
到目标单元格。有什么想法吗?
在您使用 =test_yes_sheet(A1)
的 test_yes_sheet(input)
脚本中,input
的值作为字符串值提供给 message_objs
。另一方面,你的 test_no_sheet()
,我认为 message_objs
是一个数组。我认为这就是你的问题的原因。当你想使用test_yes_sheet(input)
时,下面的修改如何?
发件人:
var message_objs = input
收件人:
var message_objs = input.replace(/'/g, "").split(",").map(e => e.trim());
- 通过这次修改,将
input
的字符串值转换为数组,放入message_objs
.
注:
顺便说一句,在你的脚本中,我认为下面的修改也可以使用 filter
。 Ref
function sample(input) {
var message_objs = input.replace(/'/g, "").split(",").map(e => e.trim());
var array = message_objs.filter(e => !e.includes("ampion.net"));
return array;
}
参考文献:
我有这个 google 应用程序脚本,它应该充当自定义函数,这意味着您可以通过键入 =
然后在 [=46 的单元格中输入函数名称来调用它=],然后提供传递给函数的输入值。然后在脚本中使用 return
将输出发送回单元格。
下面的代码是概念验证。它只需要一个电子邮件地址数组并循环遍历它,将任何不包含给定子字符串(在本例中为“yahoo.com”)的地址推回到数组 array
,然后是 return
编辑。此脚本按预期工作。
function test_no_sheet()
{
var message_objs = ['grgrhargr@gmail.com','rgtgtgt@yahoo.com','asseeff@gmail.com','dfsdfds@yahoo.com','mlamson@yahoo.com','dfdfdfdeffesa@yahoo.com','dffhyynhnyfnd@yahoo.com'];
var array = [];
for (var i = 0; i < message_objs.length; i++) {
if (!message_objs[i].includes("yahoo.com")){array.push(message_objs[i])} else {continue}
console.log(message_objs[i]);
console.log("test" + array)
//Do something
}
return array
}
当我尝试使用单元格中包含的数组作为输入时出现问题。证明脚本的 sheet 函数适配只是简单地更改为将 input
参数传递给 message_objs.
function test_yes_sheet(input)
{
var message_objs = input
var array = [];
for (var i = 0; i < message_objs.length; i++) {
if (!message_objs[i].includes("yahoo.com")){array.push(message_objs[i])} else {continue}
console.log(message_objs[i]);
console.log("test" + array)
//Do something
}
return array
}
我提供了一个 publicly available sheet 来演示这个问题(我相信您也可以在 extensions 下访问底层的 google 应用程序脚本)。基本上当 sheet returns 数组时,它 post 将这个可怕的垃圾列表发送到目标单元格,它显然只是简单地获取输入数组,分隔每个字符,并且 posts 中的每个字符到 sheet 中的一个新行。我希望它只是 post 循环输出 array
到目标单元格。有什么想法吗?
在您使用 =test_yes_sheet(A1)
的 test_yes_sheet(input)
脚本中,input
的值作为字符串值提供给 message_objs
。另一方面,你的 test_no_sheet()
,我认为 message_objs
是一个数组。我认为这就是你的问题的原因。当你想使用test_yes_sheet(input)
时,下面的修改如何?
发件人:
var message_objs = input
收件人:
var message_objs = input.replace(/'/g, "").split(",").map(e => e.trim());
- 通过这次修改,将
input
的字符串值转换为数组,放入message_objs
.
注:
顺便说一句,在你的脚本中,我认为下面的修改也可以使用
filter
。 Reffunction sample(input) { var message_objs = input.replace(/'/g, "").split(",").map(e => e.trim()); var array = message_objs.filter(e => !e.includes("ampion.net")); return array; }