Javascript 带getNotes的ARRAYFORMULA

Javascript 带getNotes的ARRAYFORMULA,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,是否可以使用Arrayformula填充公式“getNotes”上的整个列? 到目前为止,我已经添加了应用程序脚本上的小功能,如下所示: function getNotes(cell) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var range = ss.getRange(cell) return range.getNotes(); } =ARRAYFORMULA(IFERROR(getNotes(Addre

是否可以使用Arrayformula填充公式“getNotes”上的整个列?

到目前为止,我已经添加了应用程序脚本上的小功能,如下所示:

function getNotes(cell)
{
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var range = ss.getRange(cell)
   return range.getNotes();   
}
=ARRAYFORMULA(IFERROR(getNotes(Address(row(B1:B), column(B1:B)))))
然后填充列的第一个单元格,如下所示:

function getNotes(cell)
{
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var range = ss.getRange(cell)
   return range.getNotes();   
}
=ARRAYFORMULA(IFERROR(getNotes(Address(row(B1:B), column(B1:B)))))
这似乎不起作用。记录在案

=getNotes(Address(row(B2:B), column(B2:B)))
工作正常。

根据您的评论更新了答案: 如果您想
转置
整个列范围并传递整个列
B
“B1:B”
,您可以使用此选项:

function getNotes(rng){
  const ss = SpreadsheetApp.getActive().getActiveSheet();
  const index = ss.getMaxRows()-ss.getRange(rng).getNotes().flat().reverse().findIndex(v=>v!='');
  const range = ss.getRange(rng+index);
  return range.getNotes();
}
基本上,此脚本将找到最后一个有注释的单元格,并返回到该单元格,而不是整个范围:

您也可以使用
getNotes(“B1:B”)
以同样的方式工作,但它会将值分散在一列而不是一行中

说明: 正如塔奈克在评论中提到的,您当前的代码:

function getNotes(cell)
{
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var range = ss.getRange(cell)
   return range.getNotes();   
}
需要以字符串形式传递所需的范围:

=getNotes(“B1:B”)

由于此自定义函数本身返回一个数组,因此不需要
arrayformula

然后,如果需要,您可以使用内置的google sheets公式,如
transpose

备选办法: 您可以改为使用图纸对象的方法,该方法允许您在需要时传递数字:

function getNotes(rs,cs,re,ce)
{
   var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
   var range = ss.getRange(rs,cs,re,ce);
   return range.getNotes();
}
然后这样称呼它
=getNotes(1,2,3,1)


这对于了解此
getRange
方法的工作原理非常有用。

在脚本中,例如,当将
=getNotes(“B2:B”)
放入单元格时,结果是否与您的目标相同?我的目标是让公式获取单元格的注释,以填充其列中相应的单元格。例如,单元格B2中的注释应填充P2单元格、B10到P10,依此类推。我只是想既然ArrayFormula的取值范围是B1:B,那就应该这样。如果不是这样的话,我会很高兴看到正确的方法。根据回答者对未来子孙后代的建议,我在这里为问题添加了第2部分:正如你提到的,我尝试过使用转置,但我遇到了一些问题。就是它现在的样子。当第一个单元格向我抛出一个错误时,下面的单元格都不会被填充。我想我可能忘了包含一个关键信息,那就是我想在任意创建新行时,用公式的结果自动填充单元格,如ArrayFormula。@user3245228查看我的更新答案。您有2个选项,您可以转换特定的范围(如我在回答中所示-
“B1:B10”
),或者使用我的脚本查找带有注释的最后一个单元格。我现在给你两个选择:)这个答案是朝着正确方向迈出的一大步,非常感谢。还有一个重大问题需要解决;与ARRAYFORMULA不同,当您通过任何条件以任意方式对列表进行排序时,注释不会跟随单元格,而是保留在最初填充的单元格中。有可能让他们那样做吗?作为一个简单的附带问题,我想使用
IF(ROW(a:a)=1,“label”,getNotes(“B1:B”)
来标记单元格,但这似乎不起作用。有没有办法给它贴上标签并加以防止?此单元格与注释位于同一列(第一行)。@user3245228谢谢您的反馈。不幸的是,stackoverflow不允许后续问题,而且答案已经很长了。请您发布一个关于此修改的新问题,其他用户(包括我)也可以回答,许多其他读者将受益于这两个问题。因此,考虑通过点击答案左边的嘀嗒按钮来接受这一点,并发布一个关于后续修改的新问题。很抱歉不方便。我已将您的答案标记为已接受,并在此处发布了一个新答案:谢谢您的帮助。