tom*_*der 5 google-sheets google-apps-script custom-function
我在单元格中有以下功能.它从其他单元格中读取日期,而不是计算年龄并以"3周5天"的格式进行转换
=INT((TODAY()-D19)/7)&" weeks, "&(TODAY()-D19-(INT((TODAY()-D19)/7)*7))&" days"
Run Code Online (Sandbox Code Playgroud)
有用.
现在我想将这个长字符串替换为一个简单的函数:
=AGEINWEEKS(D19)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我已经尝试在脚本编辑器中编写此脚本
function ageInWeeks(from_date) {
return SpreadsheetApp.getActiveSheet().getRange("D16").setFormula('=ROUND((TODAY()-D16)/7)&" weeks, "&(TODAY()-D16-(ROUND((TODAY()-D16)/7)*7))&" days"');
}
Run Code Online (Sandbox Code Playgroud)
但它返回错误
错误:您无权调用setFormula(第3行,文件"Code")
先感谢您!
此致,Tomaž
如果您要创建自定义函数以获得与电子表格函数相同的结果,则必须以执行计算的方式使用Google Apps脚本,而不是尝试使用它来将公式设置到电子表格中(正如塞尔所指出的那样,不会因为被禁止而无效).
(另外,为了向未来的读者表明,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'
}
Run Code Online (Sandbox Code Playgroud)
如果它引用D19,这可以放在除D19之外的任何单元格的电子表格中,例如:
=ageInWeeks(D19)
Run Code Online (Sandbox Code Playgroud)
单元格D19包含过去的日期.
(请注意,自定义函数可能比原始电子表格公式慢)
| 归档时间: |
|
| 查看次数: |
4683 次 |
| 最近记录: |