【问题标题】:Google Spreadsheet custom function made of built in spreadsheet functions由内置电子表格函数组成的 Google 电子表格自定义函数
【发布时间】:2013-07-13 16:04:16
【问题描述】:

我在一个单元格中有以下功能。它从其他单元格读取日期,然后计算年龄并将其转换为“3周5天”格式

=INT((TODAY()-D19)/7)&" weeks, "&(TODAY()-D19-(INT((TODAY()-D19)/7)*7))&" days"

有效。

现在我想把这个长字符串替换成一个简单的函数:

=AGEINWEEKS(D19)

我该怎么做?

我已经尝试在脚本编辑器中编写此脚本

function ageInWeeks(from_date) {
  return SpreadsheetApp.getActiveSheet().getRange("D16").setFormula('=ROUND((TODAY()-D16)/7)&" weeks, "&(TODAY()-D16-(ROUND((TODAY()-D16)/7)*7))&" days"');
}

但它返回错误

错误:您无权调用 setFormula(第 3 行,文件“代码”)

提前谢谢你!

问候, 托马斯

【问题讨论】:

    标签: google-apps-script google-sheets custom-function


    【解决方案1】:

    如果您希望创建自定义函数以提供与电子表格函数相同的结果,则必须使用 Google Apps 脚本执行计算,而不是尝试使用它来将公式设置为电子表格(正如 Serge 指出的那样,由于不允许这样做,因此无法使用)。

    (另外,为了让未来的读者清楚,Google Apps 脚本及其自定义函数无法使用 google 电子表格公式执行计算。它们使用 javascript 语言执行计算。另一方面,脚本通过 setFormulas 可以用于将电子表格公式写入单元格,然后电子表格公式将执行计算......但如果脚本被用作自定义函数(即,如果在带有 = 符号的单元格中调用它)但仅当脚本是从其他方式调用的,例如菜单项或触发器,无论是响应电子表格编辑或计时器的触发器。)

    因此,您可以将javascript 写入自定义函数来计算周数,这样的脚本可以是:

    function ageInWeeks(date) {
    var mil = new Date() - new Date(date).getTime()
    var seconds = (mil / 1000) | 0;
    mil -= seconds * 1000;
    
    var minutes = (seconds / 60) | 0;
    seconds -= minutes * 60;
    
    var hours = (minutes / 60) | 0;
    minutes -= hours * 60;
    
    var days = (hours / 24) | 0;
    hours -= days * 24;
    
    var weeks = (days / 7) | 0;
    days -= weeks * 7;
    return weeks +' wks, ' + days + ' days'
    
    }
    

    如果引用 D19,则可以将其放入除 D19 之外的任何单元格中的电子表格中,例如:

    =ageInWeeks(D19)
    

    单元格 D19 包含过去的日期。

    (请注意,自定义函数可能比您原来的电子表格公式要慢)

    【讨论】:

      【解决方案2】:

      来自documentation : 自定义函数返回值,但它们不能在它们所在的单元格之外设置值。在大多数情况下,单元格 A1 中的自定义函数无法修改单元格 A5。

      如果您描述您的典型用例,您可能会建议另一种方法。

      【讨论】:

      • 如果函数返回类似["", "", "", "", "Value"] 的内容,A5 将由Value 填充
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 2012-08-12
      • 2012-02-26
      • 1970-01-01
      相关资源
      最近更新 更多