🚀

Slackワークフローからスプレッドシートに記録された日時表記を変換する方法

2023/06/21に公開

導入

こんにちは、dely株式会社で情シスをやっているryutaです。
(dely株式会社は、国内No.1のレシピ動画プラットフォーム「クラシル」・ライフスタイルメディア「TRILL」、そして国内最大級のライバーマネジメント事務所「LIVEwith」を運営しています。)

今回の課題

Slackワークフローのフォームで集めた回答をスプレッドシートに記録すると、日時が以下のようなアメリカンな感じで記録されます。
Tue, 20 Jun 2023 07:58:28

この表記の場合、スプレッドシートで表示形式を日時系のものに変更しても自動で変換されないため、変換するGASを作成しました。

記録までの流れ

フロー

実際に記録されたデータ

動作コード

function convert_timestamp_to_date() {
  let sheet = SpreadsheetApp.getActive().getSheetByName("シート1");
  let v = sheet.getDataRange().getValues().length;

  let update_values = []

  for (let i=2; i<=v; i++){
    let target_cell = "A"+i.toString();
    let obj_date = new Date(sheet.getRange(target_cell).getValue());
    let fmt_date_str = Utilities.formatDate(obj_date, 'Asia/Tokyo', 'yyyy/MM/dd');
    update_values.push([fmt_date_str])
    
    console.log(target_cell, obj_date, fmt_date_str);
  }

  let update_cell_range = "B2:B"+v;
  sheet.getRange(update_cell_range).setValues(update_values);
}

ポイント

日時のフォーマット変更について

日時の表記変換は以下を利用しています
https://developers.google.com/apps-script/reference/utilities/utilities?hl=ja#formatDate(Date,String,String)

フォーマットは以下の仕様に従い、任意の形に変換可能です。
このコードでは yyyy/mm/dd という年月日という並びに変換しています。
https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

動作スピードについて

GASからスプレッドシートのデータ更新を行う場合、1行単位で書き換えるより全行一気に置き換える方が高速に動作します。
そのため、全行一気に書き換えるよう処理を書いています。

動作結果

実行ログ

変換後のスプレッドシート表示

おまけ

気づいたタイミングで変換処理をかけるのも良いですが、スプレッドシートに変更が入ったタイミングで自動で動作するようにトリガーを設定しておくと都度起動しなくてよくなるのでおすすめです😚

Discussion