2013-01-19 74 views
1

道歉的另一個日期/時間相關的職位。我還沒有得到我的頭,所以任何意見歡迎。 執行摘要:Excel可用於處理時間較短(運動賽事時間等),但表格不能,因爲您需要編寫一個腳本來顯示較短的時間,並且腳本會將某些東西擰緊表單不再將細胞視爲稍後手動更改時間的時間。與Excel相比,Google電子表格日期/時間損壞了嗎?

我需要的時間通常很短,在幾分鐘的時間內,秒數到2位小數。我必須在這些時間進行算術運算(通常只與其他時間比較)。

我們目前在Excel中存儲所有內容,工作正常。如果您在一個範圍內定義自定義顯示格式,然後輸入時間如2:43.02(2分鐘,43.02秒),那麼該單元格仍包含一個時間,Excel可以在這些時間進行算術運算。

然後我上傳Excel電子表格,並在表格中打開它。沒有像Excel那樣的內置格式擴展,因此我必須使用擴展功能來顯示時間,例如2:43.02(請參閱下面的函數,函數調用setNumberFormat)。在該文檔的新Sheets版本中,Excel時間仍然是時間,比較工作,並且一切看起來都正確。

這是問題所在。只有您手動輸入新時間到表單元格時,所有內容纔會生效。例如,如果我輸入2:41.05,則單元不再包含時間對象,並且所有算術都被破壞。所以,我無法使用表格來替換Excel。我必須將所有內容保留在Excel中並偶爾上傳,並保持Sheets版本爲只讀。

表格中有一些魔術可以確定單元格是否包含日期。如果我使用內置的時間格式,Sheets知道這是一個時間,如果手動更改時間,可以進行算術運算。如果我使用下面的功能(從here)更改時間格式,那麼這種魔法就會丟失,我無法手動更改時間。

function EditFormat() { 
    var oldname = SpreadsheetApp.getActiveRange().getNumberFormat(); 
    var name = Browser.inputBox("Current format (blank = no change):\r\n"+ oldname); 
    SpreadsheetApp.getActiveRange().setNumberFormat((name=="")?oldname:name); 
} 

問題:是setNumberFormat壞了嗎?有沒有更好的方法來做到這一點?我可以在腳本中做一些其他的東西來保存細胞的魔法狀態嗎?還是我必須回到Excel?

謝謝。

回答

4

這是由於(可悲長期)牀單錯誤由此解析器在兩個方面失敗:

  1. 格式2:43.02未成功強制轉換爲時間值,但格式0: 02:43.02(或0:2:43.02)是。
  2. 即使如此,對於直接輸入的值,百分之一秒也會被忽略。

這兩點適用於電子表格中的所有值,但只有第二點適用於直接輸入的值。因此,一個解決辦法是通過一個公式來輸入:

=VALUE("0:2:43.02")

,或者您可以有一個被格式化爲純文本的輸入欄,和然後有一個顯示列類似地經由公式轉換爲時間值(與這個顯示列將被自定義格式化)。或者,您可以有一個助手腳本,它爲活動單元格提供一個輸入框,您可以在其中輸入拆分時間,然後創建一個上述公式並將其填充到單元格中(集合數字格式可以內置到此腳本中以及)。

我希望這些解決方法是不必要的。

+0

剛剛嘗試過,它的工作原理,謝謝 - 你是明星。這是我Google體驗的第四天,我不得不說我只是有點生氣。我在問題追蹤器中發現了一些重要項目,這些項目正在進行2年,沒有任何進展。 – EML

+0

亞當 - 我不認爲你可以看看相關的http://stackoverflow.com/q/14398594/785194?我懷疑你知道解決方法; Sheets單元格顯示2位小數的秒數,但如果我嘗試將單元格值讀入GAS中的Date對象,百分之一將丟失。 – EML