こんにちは!新年度が始まり、早2か月。新入社員が入ってきて、そろそろ慣れてきたところだと思います。
新人のころと言えば、上司への報連相。特に日報を毎日書かせているところもあると思います。最近は、Slackのワークフロービルダー(以下WFBと記載)を使って、日報を書き込んでもらい、その書いた内容をGSSに登録できるように設定しました。
ただ、WFBで入力した内容は、GSSに書き込むことができますが、タイムスタンプや日付を想定通りに書き込むことができませんでした。
そのため、今回はスプレッドシート(以下GSSと記載)を更新する際に、自動でタイムスタンプと日付を入力できるようにしていきます。
前提条件
作業に取り掛かる前に、以下の2点がすでに済であることを前提に話を進めていきます。
・SlackでWFBが作成されていること。
・WFBで入力した内容が、スプレッドシートに登録されること。
参考)https://teachme.jp/90980/manuals/10117361
タイムスタンプの更新
タイムスタンプや日付はApps Scriptを用いると入力できるようになります。
今回は下記のような表を想定して、A列とB列にそれぞれ入力していきます。

GSSの編集時に、自動的に「タイムスタンプ」と「日付」に値を入力。
①GSSのタブにある「拡張機能」から「Apps Script」を選択。以下のコードを書いていきます。
まずは、反映先シートのセルを指定するために、変数に値を設定します。それぞれの変数は以下を設定しています。
・rawSheet:編集するシート名。
・headerRow:表のヘッダーに当たる行。
・timeStampColumn:タイムスタンプは、左から1列目のため、1を設定
・dateColumn:日付は、左から2列目のため、2を設定。
function addTimeStampAndDate() {
const rawSheet = '日報';
const headerRow = 1;
const timeStampColumn = 1;
const dateColumn = 2;
②アクティブシートとシート名を取得。
・getActiveSheet
:アクティブなスプレッドシートを取得する。
・getName
:シート名を取得する。
ちなみに、アクティブではないスプレッドシートを取得する方法は、openById(id)
やopenByUrl(url)
などがあります。
const sheet = SpreadsheetApp.getActiveSheet();
const sheetName = sheet.getName();
③取得したアクティブシートが編集するシートの場合、セル範囲を取得する。
・getActiveRange
:アクティブシートの選択範囲を返す。
・getColumn
:セル範囲の最初のセルの列番号を取得する。
・getRow
:セル範囲の最初のセルの行番号を取得する。
if (sheetName !== rawSheet) return;
const range = sheet.getActiveRange();
const col = range.getColumn();
const row = range.getRow();
④③で取得した行が1行目でない場合、入力するタイムスタンプと日付を取得する。
・Utilities.formatDate
:Dateオブジェクトを文字列に変換するユーティリティメソッド
if (row === headerRow) return;
const currentDate = new Date();
const timeStamp = Utilities.formatDate(currentDate, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');
const date = Utilities.formatDate(currentDate, 'Asia/Tokyo', 'yyyy/MM/dd');
⑤編集するセルが空白の場合、タイムスタンプと日付を入力
if (slackNameCell.isBlank()) return;
if(timeStampCell.isBlank()) timeStampCell.setValue(timeStamp);
if(dateCell.isBlank()) dateCell.setValue(date);
後はトリガーを設定すれば、WFBからGSSに入力した際に、タイムスタンプと日付を入力できるようになります。
まとめ
今回はWFBから入力した値をGSSに反映した際に、タイムスタンプと日付も併せて入力するプログラムを作成しました。
タイムスタンプはプログラムを作成しなくても反映できますが、日付はできなかったので、今回ついでにやってみました。
GSSは他にもいろんなやり方でプログラムすると便利だと思うので、どんどん活用していきたいと思います。