[英]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.