如何使 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.

注:

  • 顺便说一句,在你的脚本中,我认为下面的修改也可以使用 filterRef

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

参考文献: