簡體   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