自分でスプレッドシートを新規作成した場合は大体問題にならないかと思いますが、他人が作ったエクセルをスプレッドシートとして開き、それに対してプロジェクト(スクリプトエディタ)でスクリプトを書いた場合に、問題は起こるかもしれません。。(私はこれでハマりました)
サンプル
以下、「A1」のセルに現日時を書き込み、その隣のセルに時を書き込む処理。
function myFunction() {
var range = SpreadsheetApp.getActiveSheet().getRange('A1');
range.setValue(new Date);
var date = range.getValue();
range.offset(0, 1).setValue(date.getHours());
}
スプレッドシートのタイムゾーンと、プロジェクトのタイムゾーンが一致していれば、何も問題ありません。
「A1」のセルに書き込まれた日時が「2017/12/03 8:03:16」だとすると、その隣は「8」になります。
ところが、スプレッドシートのタイムゾーンと、プロジェクトのタイムゾーンが不一致だと当たり前ですが上記の通りにはなりません。
例えば、スプレッドシートのタイムゾーンが「(GMT+08:00)香港」で、プロジェクトのタイムゾーンが「(GMT+09:00)東京」の場合、「A1」のセルに書き込まれた日時が「2017/12/03 8:03:16」だとすると、その隣は「9」になります。
タイムゾーンを設定するには
例として日本時間を設定する場合。
スプレッドシート
- 画面上部のメニューバーから「ファイル」>「スプレッドシートの設定」を選択
- 「全般」タブの「タイムゾーン」の項目を「(GMT+09:00)東京」に設定
プロジェクト
- 画面上部のメニューバーから「ファイル」>「プロジェクトのプロパティ」を選択
- 「情報」タブの「タイムゾーン」の項目を「(GMT+09:00)東京」に設定
以上になります。