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

时间:2019-06-03 19:12:18

标签: google-apps-script google-sheets custom-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;

}

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

为什么会这样?

2 个答案:

答案 0 :(得分:1)

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

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

Set input format as Plain text

例如,我使用this 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);
}

在这里,它的格式设置为纯文本: enter image description here

答案 1 :(得分:0)

这对我有用:

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