
[英]Cannot Access Duration Value in Google Sheets with Google Apps Script
[英]How do I calculate duration in google apps script from sheets?
谢谢你提出我的问题。 对我来说,我正在做的事情应该非常简单。 我是编程的初学者,所以我不知道我需要做什么才能完成。 我需要帮助。
问题:我必须有4列次。 (Travelto,Arrive,Depart,Travelfrom)我并不总是使用所有这些,所以我的脚本必须认识到我想要基于连续的哪些单元格是空白的或具有内容的某些值。 我已经尝试在电子表格上使用isblank()来确定二进制数,然后我将其转换为小数。 我希望我的脚本可以这样做,所以我不必在谷歌工作表中添加另一列。 我想我会使用一个数组,然后检查数组中的每个元素是否为空,然后将该数组中的每个元素乘以1,这样它现在是一个数字而不是一个布尔值。 然后我想获取数组的元素并将它们转换为单个二进制数并将其转换为十进制数以提供给我的开关案例,其中将包含计算小时数的正确方法并以小数形式返回小时数以便它应该形成如1.75的1小时45分钟。 它返回的值必须能够相加,因此函数不能返回字符串。 我也更喜欢输出2位小数。
我试图找出如何计算谷歌的应用程序脚本中的时间。 我的成功有限。 我的脚本输出无法理解它是如何得到答案的。 这可能是因为我无法弄清楚如何判断脚本的时间。 它看到13:00:00,0.5416667,还是完全不同的东西? 我似乎无法弄明白。
我想从Google工作表电子表格中传递两个值,这些值在视觉上按时间格式化,然后将这两个值从另一个中减去一个并获得它们之间的时间长度,以便我知道已经工作了多少小时。
function worked(time1,time2) //pass 2 time values to function
{ //Start of the function
var time1; //declare time1 variable
var time2; //Declare time 2 variable
var outnumber = time1-time2; //Declare outnumber and subtract time1 from time2
return outnumber //return the difference of time1 and time2
}
这是我的表单和编辑器中包含的代码的链接。 任何拥有该链接的人都可以发表评论https://docs.google.com/spreadsheet/ccc?key=0Ar4A89ZoxmJCdHBFR0VCblVtWUVvR3hFbTdlcjdKNUE&usp=sharing
请告诉我我做错了什么或根本没做什么来完成这项工作。 谢谢Goldenvocals369
您看到输出的数字是以ms为单位的差异。 您需要将ms转换为所需的格式。
我在这里找到了一个简洁的方法: https : //coderwall.com/p/wkdefg
你的代码看起来像这样。
function worked(time1,time2)
{
var time1;
var time2;
var outnumber = time1-time2;
return msToTime(outnumber)
}
function msToTime(duration) {
var milliseconds = parseInt((duration%1000)/100)
, seconds = parseInt((duration/1000)%60)
, minutes = parseInt((duration/(1000*60))%60)
, hours = parseInt((duration/(1000*60*60))%24);
hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? "0" + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;
return hours + ":" + minutes + ":" + seconds;
}
您可以使用此功能。 该函数的文档是:
返回范围中左上角单元格的显示值。 该值的类型为String。 显示的值会考虑日期,时间和货币格式设置格式,包括电子表格的区域设置自动应用的格式。 空单元格将返回一个空字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.