LoginSignup
1
0

何が何でもExcelで!

そういった熱い思いは度々お聞きします。
気持ちは良くわかります。

しかしPower Automate loverとしては、何とかしてPower Automateと絡めたい・・・
そういった気持ちもございます。

それなら・・・
Office Scriptsいってみるか!ということで書いてみることにしました。

Outlookの連絡先をExcelからまとめて登録したい

Outlookには、連絡先がありますね。
こちらに様々な連絡先を登録することができます。

ただし一件一件まとめて入力するのは手間・・・。
そういったシーンもあるのでは・・・🧐

そういった時には、Outlook連絡先をインポートを使用すれば、CSVで一括登録が可能です。

スクリーンショット 2024-06-13 205821.png

一度登録があるものは、再登録もされないので非常に便利です。

無理にExcelでやる必要はありません。
しかしそれでもExcelでやりたいんだ🔥という熱い思いもあるでしょう。

車輪の再発明な感じが否めませんが、Office Scriptsを書いてみましょう!

Office Scriptsの利点

Office Scriptsの利点として、ブックからPower Automateを起動できることが挙げられます。

ブック内にフローを追加すれば、ボタンクリック感覚で使えます。
Power Automateにつなぐことができれば、多様なAPIに繋げることができるので、可能性は無限大∞

またスクリプトであるostsファイルを、SharePointに配置することで、複数の人とスクリプトを共有できます。よくわからない削除事故もリカバリーできるので嬉しい限りです。

拡張子にも依存されないので嬉しいですね!

Office Scriptsの用途としては

  1. データの集計
  2. レポート作成
  3. 大きなデータセットの計算処理
  4. Power Automateでやりづらいデータ加工

といった様々なところで、活躍します。

さて、肝心なOutlook連絡先の追加に移っていきましょう。

Power Automateの機能

Power Automateに標準で、Outlook 365 連絡先の作成 (V2)アクションが存在します。

こちらを使えばサクっと連絡先の追加はできそうです。
まあサクっといけちゃうわけですよ。

つまらない。
これをそのままやっても芸がないので、Microsoft Entra ID 付きの HTTP (事前承認済み)を使って、一括登録に試みます。

Graph APIを用いた連絡先の登録

標準コネクタの範囲内でできれば嬉しいのですが、第 1 セグメント/me、第 2 セグメント/contactsなので、妥当なコネクタが思いつきません。

今回紹介しているMicrosoft Entra ID 付きの HTTP (事前承認済み)は、プレミアムコネクタです。ライセンスにご注意ください。

実際に設定してみると、このようになります。

スクリーンショット 2024-06-13 211111.png

キー
URI https://graph.microsoft.com/v1.0/me/contacts
Method POST

■ ヘッダー

キー
Content-Type application/json
HTTP送信、本文
{
  "givenName": "なまえ",
  "emailAddresses": [
    {
      "address": "メールアドレス",
      "name": "メールアドレスに付帯する名前"
    }
  ],
  "businessPhones": [
    "電話番号"
  ],
  "homeAddress": {
    "street": "住所"
  }
}

こちらを使えば、サクっと連絡先を追加できます。

ただし一件一件繰り返しするのは、あまりカッコよくないですね。
ということで、まとめてやってみましょう!

バッチリクエスト

バッチリクエストを使用することで、複数の連絡先を一度に追加することができるようです

スクリーンショット 2024-06-13 214222.png

URI
https://graph.microsoft.com/v1.0/$batch

上記に対して、リクエストをまとめて格納します。

二件のコンタクトの追加の場合
{
    "requests": [
        {
            "id": "0",
            "method": "POST",
            "url": "/me/contacts",
            "body": {
                "givenName": "John Doe",
                "emailAddresses": [
                    {
                        "address": "john.doe@example.com",
                        "name": "John Doe"
                    }
                ],
                "businessPhones": [
                    "+1234567890"
                ],
                "homeAddress": {
                    "street": "123 Main St, Springfield, IL"
                }
            },
            "headers": {
                "Content-Type": "application/json"
            }
        },
        {
            "id": "1",
            "method": "POST",
            "url": "/me/contacts",
            "body": {
                "givenName": "Jane Smith",
                "emailAddresses": [
                    {
                        "address": "jane.smith@example.com",
                        "name": "Jane Smith"
                    }
                ],
                "businessPhones": [
                    "+0987654321"
                ],
                "homeAddress": {
                    "street": "456 Elm St, Springfield, IL"
                }
            },
            "headers": {
                "Content-Type": "application/json"
            }
        }
    ]
}

ほとんど前述のものと一緒ですね。
つまり、このJSONを作って送ればOK!

Office ScriptsでJSONを作成する

まず先にA1セルから下記のような表を格納することを想定します。

image.png

Name Email Phone Address
サカナ 太郎 sakana.taro@example.com 090-1234-5678 東京都港区魚町1-2-3
エビ 花子 ebi.hanako@example.com 090-2345-6789 神奈川県横浜市エビ町4-5-6
タコ 次郎 tako.jiro@example.com 090-3456-7890 大阪府大阪市タコ町7-8-9
カニ 三郎 kani.saburo@example.com 090-4567-8901 北海道札幌市カニ町10-11-12
イカ しおん ika.shion@example.com 090-5678-9012 福岡県福岡市イカ町13-14-15
ホタテ 恵子 hotate.keiko@example.com 090-6789-0123 千葉県千葉市ホタテ町16-17-18
サーモン 竜也 salmon.tatsuya@example.com 090-7890-1234 新潟県新潟市サーモン町19-20-21
クジラ 雅 kujira.miyabi@example.com 090-8901-2345 京都府京都市クジラ町22-23-24
ウナギ 守 unagi.mamoru@example.com 090-9012-3456 愛知県名古屋市ウナギ町25-26-27
サバ 幸子 saba.sachiko@example.com 090-0123-4567 広島県広島市サバ町28-29-30

これをOffice ScriptsJSONにします。

ostsファイル
function main(workbook: ExcelScript.Workbook): string {
    // 1. シート名を指定
    const sheetName: string = "data";
    let sheet: ExcelScript.Worksheet = workbook.getWorksheet(sheetName);

    // 2. データ範囲を設定
    const startRow: number = 1;
    const startCol: number = 1;
    const endRow: number = sheet.getUsedRange().getRowCount();
    const endCol: number = 4; // A~D列
    let range = sheet.getRangeByIndexes(startRow - 1, startCol - 1, endRow, endCol);
    let values: string[][] = range.getValues() as string[][];

    // JSONの作成
    let requests: { id: string; method: string; url: string; body; headers: { "Content-Type": string } }[] = [];
    // 1行目はヘッダー
    for (let i: number = 1; i < values.length; i++) {
        let row: string[] = values[i];
        let contactData: {
            givenName: string;
            emailAddresses: { address: string; name: string }[];
            businessPhones: string[];
            homeAddress: { street: string }
        } = {
            givenName: row[0],
            emailAddresses: [
                {
                    address: row[1],
                    name: row[0]
                }
            ],
            businessPhones: [
                row[2]
            ],
            homeAddress: {
                street: row[3]
            }
        };
        requests.push({
            id: i.toString(),
            method: "POST",
            url: "/me/contacts",
            body: contactData,
            headers: {
                "Content-Type": "application/json"
            }
        });
    }

    let batchRequestData: { requests: typeof requests } = {
        requests: requests
    };

    let jsonString: string = JSON.stringify(batchRequestData, null, 2);

    // JSON文字列を戻り値として返す
    return jsonString;
}

A1から行数を数えてJSONにしています。
書き終えたら、スクリプトの詳細からコピーを保存を選択すると、SharePointにスクリプトが保存されます。

image.png

Power Automate

Power Automateは

  1. フローを手動でトリガーする
  2. SharePoint ライブラリからスクリプトを実行する
  3. Microsoft Entra ID 付きの HTTP (事前承認済み)

3ステップ

ExcelでPower Automateを呼び出す

ExcelでPower Automateを呼び出す方法は若干曲者です。

作業の自動化からテンプレートを選択し、テンプレートを修正する形で対処します。
コチラの操作を実施すると、Power Automateフローの編集ができます。

テンプレートは選択のたびに、新しくテンプレートに準じたフローを作成する、といった考え方なので、元のテンプレートをいじっているわけではありません。

コチラに先ほどのフローを移植し、環境を整えます。
これで準備完了です!

実験!

[ 自動化 ]タブの[ 作業の自動化 ]で、Power Automateのアイコンをクリックします。

image.png

[ このブック内のフロー ]から、Power Automateが起動できます。

スクリーンショット 2024-06-13 215818.png

image.png

そうすると・・・

  • Power Automate
    スクリーンショット 2024-06-13 215905.png

  • Outlook
    image.png

Outlookに反映されました🙌
めちゃめちゃ車輪の再発明ですね!

しかしいろいろなAPIを気軽に使えることは魅力的✨
Power Automate Loveです!

おわりに

Excelから○○は、無限∞にネタがわいてきますね・・・。
マラソン🏃期間中、出現率が高そうですが、ご容赦ください🙇

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0