1

我正在製作一個基本腳本,用於從外部工作表獲取持續時間,並對它們進行求和。我到目前爲止是:在Google表格Api中處理持續時間

function getHorasCasoUso() { 
    var libros = { 
    "key1" : "externalSheetURL1", 
    "key2" : "externalSheetURL2", 
    ... 
    }; 

    var horas_por_caso_uso = {}; 

    for (var key in libros) { 
    var libro = SpreadsheetApp.openByUrl(libros[key]); 
    var sheets = libro.getSheets(); 
    for (var i = 0; i < sheets.length; i++) { 
     var sheet = sheets[i]; 
     var rows = sheet.getDataRange(); 
     var numRows = rows.getNumRows(); 
     var values = rows.getValues(); 

     for (var j = 5; j < numRows; j++) { 
     var row = values[j]; 
     var caso_uso = row[6]; 
     var horas = row[4]; //The cell format is 'Duration'  

     if (!caso_uso) 
      continue; 

     if (!!horas_por_caso_uso[caso_uso]) 
      horas_por_caso_uso[caso_uso] += horas; 
     else 
      horas_por_caso_uso[caso_uso] = horas; 
     } 
    } 
    } 

    var ss = SpreadsheetApp.getActiveSheet(); 
    for (var key in horas_por_caso_uso) { 
    ss.appendRow([key, horas_por_caso_uso[key]]); 
    } 

} 

問題是存儲在'horas'中的數據是一個字符串。我想要在該單元格中獲得持續時間。我怎樣才能做到這一點?

回答

0

你的問題似乎頗爲相似,一個在this post,但在更大的規模......

您應該增加該值以總計數器之前(如果你需要這樣的精度或秒)轉換row[4]價值分鐘。

如果單元格的格式爲持續時間(如你說,這是)它應該不會改變。(見代碼在這篇文章的末尾)

如果沒有,也就是說,如果這些值然後返回字符串

例如:你喜歡這種簡單的字符串操作將做的工作testString = 12:34

function toMinutes(value){ 
    var minutes = Number(value.split(':')[0].replace(' ',''))*60+Number(value.split(':')[1].replace(' ','')); 
    return minutes; 
} 

(代碼工作作爲一個函數)將返回(60 * 12 + 34)

使用在你的代碼:var horas = toMinutes(row[4]);

function toMinutes(value){ 
    var duration = new Date(value); 
    var min = duration.getMinutes()+60*duration.getHours(); 
    return min; 
} 

最後,您可以改善一些錯誤捕捉功能來處理情況下,細胞是空的畸形這一功能...因爲我不知道是什麼數據看起來像我更喜歡讓你自己做。

+0

感謝您的回覆。除此之外,我必須小心時區。例如,其中一個電子表格的值爲「0:45:00」,但是當我檢查行[4]處的對應值時,我得到「Sat Dec 18 1899 02:01:48 GMT-0300(UYT)」 。 toMinutes返回121.另一方面,如果我將電子表格中的單元格格式更改爲日期時間,它將顯示12/30/1899 0:45:00。很明顯,這裏的問題是,新日期(第[4]行)在烏拉圭時間返回日期,因爲我來自烏拉圭。 – javag87 2014-09-25 20:55:41

+0

這確實會更棘手......也許會迫使它串起來並使用解析函數,我建議它會更可靠或者至少簡單得多! - 順便說一句,接受的thx。另請參閱本文,如果您嘗試使用日期方法可能會有所幫助:http://stackoverflow.com/questions/17715841/gas-how-to-read-the-correct-time-values-form-google-spreadsheet/ 17727300#17727300 – 2014-09-25 20:59:10

相關問題