4

我想要一个函数,在其中我传递一个引用的单元格,而不是一个范围,它返回该单元格的列号。

function lastRealDate(v) {
  var thisColumn = v.getColumn();
  return thisColumn;
}​

但显然我不能那样做。谁能告诉我正确的方法?电子表格脚本非常新。

error: TypeError: Cannot find function getColumn in object 

好的,也许我应该提供更多细节。我有一个工作列表,每个工作都有以下列..

项目名称 | 状态 | 完成日期 | 工作剩余天数
#1 | 准备好了 2012 年 12 月 5 日 | 0.14 工作 #2 | 持有 | 2012 年 12 月 5 日 | 0.25 工作 #3 | 准备好了 2012 年 12 月 6 日 | 1.0

完成日期由...计算

if(Days Left > 0, WORKDAY(Previous Project's Completion Date, Days Left) 字面意思是: =if(J5>0,WORKDAY(G4,J5,vars!$A$2:$A$27),"")

这一切都很好。但现在我想检查状态列。如果上一个工作的状态处于搁置状态,那么我想跳过那个工作并检查下一个工作。

所以基本上我需要遍历单元格,直到找到下一个不在 HOLD 的工作并抓住那个完成日期。

我在想这样的事情:

=if(J5>0,WORKDAY(custom_function(G4),J5,vars!$A$2:$A$27),"")

对这种情况有什么想法吗?

4

2 回答 2

2

不幸的是,这是不可能的。您不能编写“元”自定义函数。传递给您的函数的参数v,无论它只是一个单元格、一行或一列还是整个工作表,始终是单元格的值,而不是它们的“引用”或范围对象。

好消息是您已经有内置函数来执行此操作,例如=COLUMN(C1). 每当您有一个内置函数替代自定义函数时,您都应该使用内置函数。好吧,我会更进一步说:永远不要使用自定义函数。如果您确实需要脚本来进行计算,请使用另一种调用方式,即自定义菜单、图像“按钮”、onEdit触发器等。特别是现在您正在学习,完全避免自定义功能。他们不值得。

于 2012-12-05T15:35:53.717 回答
1

+Henrique 已回答您关于将哪些信息传递给自定义函数的一般问题。


为了回答您编辑中的特定用例,具有本机函数的公式可能是(假设 G 列中的日期按升序排列,状态为 F 列):

=IF(J5>0;WORKDAY(MAX(FILTER(G$2:G4;F$2:F4<>"HOLD"));J5;vars!$A$2:$A$27);"")

于 2012-12-06T21:08:25.447 回答