web-dev-qa-db-ja.com

オブジェクトから数値にセル値をキャストするGoogleスプレッドシート

Googleスプレッドシートドキュメントの1つのセルには、「経過時間」:「経過時間」としてフォーマットされたセルの合計で指定された値が保持されます。このセルのカスタムスクリプトで計算を試みると、エラーがスローされます。 typeof()関数を使用してさらに調査すると、これが「オブジェクト」として表示されます。セル値を数値に変換するにはどうすればよいですか? parseInt()またはparseFloat()の試行に失敗しました。..リンクされたシートに here が表示されます。

  • 期間としてフォーマットされた288:00を返す式を持つセルA1、
  • 次の関数から負の値-3.179.700.519.840.000,00を返す=daysHrsMins(A1)を持つセルA2:

    function daysHrsMins(input) {
       return input*1440;
    }
    

地域の設定:イタリア
タイムゾーン設定:(GMT +1)パリ

1
Riccardo

簡潔な答え

セルの値を数値に変換するにはどうすればよいですか?

Googleスプレッドシートでは、期間は日付値の単なる表示形式であるため、カスタム関数が期間をとる場合、日付オブジェクトとして扱われます。

説明

算術演算を行う

日付/時刻/期間で算術演算を行うときは、次のことに留意する必要があります。

  • Googleスプレッドシート

    • 日を単位として使用
    • 1899年12月30日0:00:00をゼロとして使用します。
    • タイムゾーンは処理しませんが、スプレッドシートにはタイムゾーン設定があります。
  • Google Apps Script/JavaScript

    • 単位としてミリ秒を使用します
    • 1970年1月1日UTCの0時00分00秒。
    • 日付オブジェクトにはタイムゾーンが含まれます。
    • スクリプトプロジェクトにはタイムゾーン設定があります。

表示形式

  • Googleスプレッドシート

    • 期間の形式があります([h]:mm:ss.00)。
  • Google Apps Script/JavaScript

GoogleスプレッドシートとGoogle Appsスクリプト間の日付の転送

日付値がGoogleスプレッドシートからGoogle Appsスクリプトに、またはその逆に転送されると、スプレッドシートのタイムゾーンを考慮して自動的に変換されます。

解決

GoogleスプレッドシートとGoogle Appsスクリプトの期間/日付の処理は異なるため、最も簡単なソリューションは、Originアプリケーションで日付/期間から数値への変換を行うことです。

Googleスプレッドシートでは、 TO_PURE_NUMBER を使用してこの変換を実行できます。

=daysHrsMins(TO_PURE_NUMBER(A1))

特定のユースケースでは、 moment.js のようなJavaScriptライブラリを使用すると便利です

参照資料

このサイトの関連Q&A:

スタックオーバーフローの関連Q&A

2
Rubén