繁体   English   中英

在Google Sheet自定义脚本函数中获取数据解析错误

[英]Getting an error parsing data in google sheet custom script function

我创建了一个简单的自定义函数以在Google表格脚本功能中进行测试。 函数定义为:

/**
* convert duration such as 1:30 to 1.5
 *
 * @customfunction
 */
function SIMPLETEST(input) {
  // simply return the input for now to test.
  return input;

}

在电子表格中,我有一个值为3:30:00的单元格A2。 当我在B2上应用此函数时,例如将b2设置为: =DURATION_DECIMAL(A2)它将返回12/30/1899 ,我认为这是基准日期。

为什么会这样呢?

这是因为您必须将该单元格的数据类型设置为“自动”或“持续时间”,并且Google表格会猜测“ 3:30:00”是自动日期和时间的一种类型,并且持续时间会对其进行转换传递给您的功能的日期/时间。 它使您可以将其保留为格式(#:##:##),但是当您将其传递给自定义公式时,Sheets会首先将其转换为Javascript Date对象,然后您的函数将其返回,Sheets会自动显示为常规日期( 12/30/1899 )。 在此处查看Google关于使用自定义函数进行日期转换的警告。

最简单的解决方案是使用格式选择下拉列表将输入格式明确设置为“纯文本”,然后在自定义功能代码中根据需要进行解析。

将输入格式设置为纯文本

例如,我使用 StackOverflow答案来编写您的自定义函数:

function DURATION_DECIMALS(input){
  // https://stackoverflow.com/a/22820471/11447682
  var arr = input.split(':');
  var dec = parseInt((arr[1]/6)*10, 10);
  return parseFloat(parseInt(arr[0], 10) + '.' + (dec<10?'0':'') + dec);
}

在这里,它可以将格式设置为纯文本: 在此处输入图片说明

这对我有用:

function durdechrs(dt) {
  return Number((dt.valueOf()-new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf())/3600000).toFixed(2);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM