在 google sheet 自定义脚本函数中解析数据时出错

Getting an error parsing data in google sheet custom script function

我创建了一个简单的自定义函数来测试 google sheets 脚本函数。函数定义是:

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

}

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

为什么会这样?

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

最简单的解决方案是使用格式选择下拉列表将您的输入格式明确设置为 "plain text",然后在您的自定义函数代码中,您可以根据需要解析它。

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

function DURATION_DECIMALS(input){
  // 
  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);
}