またまた日時関係の投稿失礼します。私はまだこれについて頭を悩ませていないので、コメントを歓迎します。エグゼクティブ サマリー: Excel は小さな経過時間 (運動競技の時間など) を処理するために使用できますが、スプレッドシートはそれができません。小さな時間を表示するにはスクリプトを作成する必要があり、スクリプトが何かを台無しにして、スプレッドシートが時間が後で手動で変更されたときに、セルを時間として扱わなくなりました。
通常、必要な時間は短く、数分程度で、秒単位で小数点以下 2 桁までです。これらの時間で算術演算を行う必要があります (通常は別の時間との比較のみ)。
現在、すべてを Excel に保存しており、問題なく動作しています。2:43.02
範囲でカスタム表示形式を定義し、時間を(2 分、43.02 秒) のように入力すると、セルにはまだ時間が含まれており、Excel はそれらの時間を計算できます。
次に、Excel スプレッドシートをアップロードして、スプレッドシートで開きます。Excel にあるような組み込みの書式設定拡張機能はありません2:43.02
。そのため、たとえば、時間を として表示するには、拡張関数を使用する必要があります (以下を参照してください。関数は を呼び出しますsetNumberFormat
)。ドキュメントの新しいスプレッドシート バージョンでは、Excel の時間はまだ時間であり、比較が機能し、すべてが正しく表示されます。
これが問題です。スプレッドシートのセルに新しい時間を手動で入力するまで、すべてが機能します。たとえば、と入力する2:41.05
と、セルに時間オブジェクトが含まれなくなり、すべての演算が壊れます。そのため、スプレッドシートを使用して Excel を置き換えることはできません。すべてを Excel に保存し、時々アップロードして、スプレッドシートのバージョンを読み取り専用にしておく必要があります。
スプレッドシートには、セルに日付が含まれているかどうかを判断する魔法があります。組み込みの時間形式を使用すると、スプレッドシートはそれが時間であることを認識し、時間が手動で変更された場合に計算を実行できます。以下の関数を使用して時間形式を変更すると (ここから)、その魔法が失われ、時間を手動で変更することはできません。
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 に戻る必要がありますか?
ありがとう。