Excel の Office Scripts でスクリプトを実行した人の情報を取得する

# 初めに

最近 Excel の作業自動化のために使える [Office Scripts](https://docs.microsoft.com/ja-jp/office/dev/scripts/) というものがリリースされました。
今まで自動化では VBA を主に使っていましたが、新たな自動化手法ということで面白そうなので触ってみました。
VBA のようにいろいろと自動化ができそうでしたがリファレンスを軽く見た感じスクリプトを実行した人の情報を取得する方法がなさそうだったので何かしらの方法で取得ができないかためしてみました。

もし誰かもっとスマートに情報を取得できる方法があれば教えてください🥺

# Office Scripts とは？

まず簡単に Office Scripts の概要を紹介します。
詳しくは [こちら](https://docs.microsoft.com/ja-jp/office/dev/scripts/) の公式情報を確認してみてください。

これまで Excel の自動化といえば VBA を使ってマクロを組むのが主流であったと思います。
しかしここにきて新たな自動化方法が提示されました。

まず記法ですが Office Scripts の場合は Typescript の記法でスクリプトを記述します。
VBA の場合は Basic の記法だったのでここは大きく変わりました。
Office Scripts は Excel のアプリケーション上にエディタが実装されているのですがこののエディタがわりと使いやすく、コードヒントや補完、コードマップの表示などがありスクリプトが書きやすくなっています。

また、今の段階(2021/6)では Web 版の Excel でしかしようすることができないので VBA のようにローカルの環境では使えません。
そのため完全に VBA を置き換えるものではないようでちょっと残念です。
デスクトップ版の Excel でも使用できるようになるとうれしいなぁ。

Office Scripts のスクリプトの保存場所は Excel ファイルの中ではなく OneDrive に外部ファイルとして保存することになります。
VBA ではスクリプトを xlsm 形式のファイルに保存するためこの点もかなり異なります。
デフォルトでは自身の OneDrive のドキュメントフォルダ内に 「Office Scripts」というフォルダができそこに保存されるようになります。

この仕様のため VBA とは違い1つのスクリプトファイルを作成しておけば別の Excel ファイルでも処理を使いまわせるという利点があります。
また、まだ試していなませんがほかの人とスクリプトも共有できるようです。

VBA との使い分けですが VBA は Excel のファイルと密に結合しているためそのファイル専用の処理を記述するのに向きますが、 Office Scripts は表のテンプレートの作成などの定型作業の自動化に向いているという感想を持ちました。

あと、VBA とは違い Excel のソフトウェアライセンスを持っている人すべてが使用できるわけではないのでそこはちょっと残念です。

現在(2021/6)は以下の[要件(ライセンス)](https://docs.microsoft.com/ja-jp/office/dev/scripts/overview/excel#requirements) を満たしている人が使用できるようです。

- Office 365 Business
- Office 365 Business Premium
- Office 365 ProPlus
- Office 365 ProPlus デバイス用
- Office 365 Enterprise E3
- Office 365 Enterprise E5
- Office 365 A3
- Office 365 A5

# スクリプトの実行者の情報を取得する

今回の本題です。
実際に Office Scripts を動かしてみるといろいろできて便利なのですが、そのスクリプトを実行した人がだれかわかるともっと便利なのでは？🤔と考え作ってみました。
用途としてはスクリプトを共有化したときに、そのスクリプトを誰が最後に実行したかなどを記録したい場合などに使えるのではと思います。

```typescript
function main(workbook: ExcelScript.Workbook) {

  const sheet = workbook.getActiveWorksheet();
  const cell = workbook.getActiveCell();

  // コメントを追加してその Author の情報を取得する
  const comment = sheet.addComment(cell,"");
  const name = comment.getAuthorName();
  const email = comment.getAuthorEmail();

  // 情報を取得した後のコメントは不要なので削除する
  comment.delete();

  // 取得した情報をアクティブなセルに転記
  cell.setValue(name);
  cell.getOffsetRange(1,0).setValue(email);
}
```

やっていることは単純で、Office Scripts を使ってコメントを作成することができるのでそのコメントの Author 情報を取得しています。
取得できる情報は「名前」と「メールアドレス」になります。

スクリプトは以下の手順で実行できます。

1. Web 版の Excel を実行すると「自動化」というタブが増えているのでそれをクリックする。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173077/6ec41ee1-b2f9-4816-2840-824bda9dc831.png)

2. 表示されたリボンの中に「すべてのスクリプト」があるのでクリックする

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173077/45bed1ba-4cbf-ea3d-895a-f98ef9ad2dfc.png)

3. 右側にコードエディターが表示されるので「新しいスクリプト」からスクリプトを作成する。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173077/cc1d7531-b6ab-41af-c21b-15b50efeea74.png)

4. エディタにスクリプトを張り付けて「実行」をする

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173077/d6b986b7-2e77-87ed-5be5-a494b62ca991.png)

このスクリプトを実行するとアクティブなセルに名前が、その下のセルにメールアドレスが入力されます。

# 最後に

今まで自動化といえば VBA でしたが新たな選択肢が増えて作業の自動化がやりやすくなりました。
まだまだ使い慣れていないので何ができるかできないかがわかっていませんがうまく使って業務を楽にできるようにしていきたいと思います！