MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Office Scriptsを利用したExcel出勤簿への簡単打刻

まえおき

ITの会社でも存在するExcel出勤簿。ついつい付け忘れてて、月末に上司に怒られながら適当な時間入れて申請とかありませんか? そもそもExcel開いて入力・印刷して手書きして~って単純にめんどくさいんですよね。そんなメンドクササを、Office ScriptsとPower Automateで解消してみよーという内容です。

Excelでも、テーブルにできるなら、Power AutomateのExcelネクターで簡単にデータの登録ができるんですが、非テーブルの勤務表(セル結合とかふんだんに使っているもの)だとそう簡単でもありません。

そこで、Office Scriptsの出番です。 Office Scriptsについては、きぬあささんのブログがとても役立ちます。 (https://www.ka-net.org/blog/?p=12733)

なにをどうしようか

考えるExcel出勤簿はとってもシンプル化して、以下のようなものとします。

f:id:mofumofu_dance:20200508085817p:plain

今回のスクリプト、フローでは、Power Automateモバイルアプリのボタンを押すと、当日の始業時間・終業時間欄に時刻を記録するというものを作りました。

Office Scripts

スクリプト内で行っているのは、

  1. 最初のシートを取得
  2. 日付が入っている列のデータを取得
  3. forループ内で、セルの値と日付を比較して、一致したらデータ登録

です。

async function main(context: Excel.RequestContext) {
  let sheet = context.workbook.worksheets.getFirst();
  var range=sheet.getRange("B6:B36");
  range.load();
  await context.sync();
  for (let i = 1; i < range.rowCount; i++) {
    console.log(range.values[i][0])
    if(range.values[i][0]==ここに日付){
      sheet.getCell(i+5, 6).values = [["ここに時刻をhh:mm形式で"]];
      sheet.getCell(i+5, 6).load;
      await context.sync();
    }
}
}

「ここに日付」と「ここに時刻」とありますが、これらはPower Automate側で与えてあげます。

IF文の中にある、6 という数字は、G列を指しています。退勤の時と出勤の時とで、この箇所も書き換えます。

      sheet.getCell(i+5, 6).values = [["ここに時刻をhh:mm形式で"]];
      sheet.getCell(i+5, 6).load;

Power Automate

Power Automate側では、

  1. タイムゾーンの変換アクションで、時刻と日付を取得
  2. 置き換えるスクリプトを、作成アクションで定義
  3. その他必要情報を追加
  4. スクリプト書き換え
  5. スクリプト実行

としています。(超簡単) Power Automateから動的にスクリプトを書き換えて実行する方法については こちらの記事 が大変参考になります。

f:id:mofumofu_dance:20200508093500p:plain

動作確認

ということで動作は以下のようになります。

おわり

テーブルではない規定のフォーマットがあるようなExcel書類に対して自動でデータを登録する場合には、マクロをつかったり、すこし大げさだけどRPAつかったりすると思いますが、 モバイルからの操作性や、クラウドサービスとの連携を考えると、Office Scriptsが使いやすいなと思います。

まだあまり情報が多くありませんが、Previewのうちに触っていると、あとで役立つかもしれません!