こんにちは!今回は、Power Automateを使って、ExcelのURLと代替テキストをSharePointリストの「ハイパーリンクまたは画像」列に自動登録する方法をご紹介します。このプロセスでは、私自身もさまざまな試行錯誤を経験し、いくつかのエラーに直面しました。でも、そのおかげで多くのことを学び、最終的には無事に目標を達成できました!この記事では、その紆余曲折を含めて、初心者の方でも参考になるようにステップバイステップで解説していきます。この記事を読めば、同じような問題で悩んでいる方も、スムーズにフローを構築できるようになるはずです。では、早速始めましょう!
フローの概要と目的
この記事でわかること
この記事を最後まで読めば、以下のことができるようになります!
- Excelデータを自動でSharePointリストに登録する方法
Excelに保存された複数のURLとその代替テキストを、Power Automateを利用してSharePointリストに自動的に登録する手順を学べます。手動で一つずつ入力する手間を省き、大量のデータを効率的に管理できます。 - 「ハイパーリンクまたは画像」列にURLと代替テキストを正しく設定する方法
SharePointリストの「ハイパーリンクまたは画像」列に対して、URLと表示名(代替テキスト)を適切に設定するための具体的な方法を解説します。これにより、リンクのクリック時に期待通りの表示名が表示され、ユーザーにとってわかりやすいリンクが提供できます。 - Power Automateの設定でよくあるエラーとその解決策
フローを構築する過程で遭遇する可能性のあるエラーと、その具体的な解決方法についても詳しく説明します。エラーに直面した際の対処法を知ることで、フローの構築がスムーズに進むようになります。
フローの目的
目的:
Excelから取得したURL(Link列)と代替テキスト(Link代替列)を、SharePointリストの「ハイパーリンクまたは画像」列に動的に設定するフローを構築すること。
期待する結果:
- ExcelのLink列とLink代替列のデータが、SharePointリストのHyperLink列に正しく反映されること。
- 複数行のデータがあっても自動で処理され、効率的にデータ管理が行えるようになること。
環境情報:
- SharePointリスト名: ListTest6
- ハイパーリンク列の内部名: HyperLink(ハイパーリンクまたは画像列)
- Excelファイル名: ハイパーリンクExcelテスト.xlsx
- Excel列名:
- URL列: Link
- 代替テキスト列: Link代替
フロー構築のステップバイステップガイド
以下の手順に従って、Power Automateでフローを構築していきます。各ステップごとに詳細な説明と、注意点を解説しますので、初心者の方でも安心して進められます。
ステップ1: フローを手動でトリガーする
まずは、フローを手動で開始できるように設定します。これにより、必要なときにフローを実行できるようになります。
手順
- Power Automateにログイン
まず、Power Automateにアクセスし、Microsoftアカウントでログインします。 - 新しいフローを作成
左側のメニューから「マイフロー」を選択し、「新しいフロー」ボタンをクリックします。次に、「手動でフローをトリガーする」を選択します。 - フローの名前を設定
フローにわかりやすい名前を付けます。例として、「ExcelからSharePointへのハイパーリンク登録フロー」とします。 - トリガーの設定を確認
特に変更せず、デフォルトのままで「保存」ボタンをクリックします。これで、フローが手動でトリガーできるようになりました。
注意点
- フローの名前は後から変更できますが、最初にわかりやすい名前を付けておくと管理が楽になります。
- 手動トリガーは、フローをテストする際にも便利です。後で自動トリガーに変更することも可能です。
ステップ2: Excelデータを取得する
次に、Excelファイルからデータを取得します。このステップでは、「表内に存在する行を一覧表示」アクションを使用します。
手順
- 新しいステップを追加
フローの編集画面で、「新しいステップ」ボタンをクリックします。 - 「Excel Online (Business)」を検索
検索バーに「Excel Online (Business)」と入力し、「表内に存在する行を一覧表示 (List rows present in a table)」アクションを選択します。 - アクションの設定
以下の項目を設定します:- 場所: Excelファイルが保存されている場所を選択します(例: OneDrive for Business)。
- ドキュメント ライブラリ: ファイルが保存されているライブラリを選択します(例: ドキュメント)。
- ファイル: 「ハイパーリンクExcelテスト.xlsx」を選択します。
- テーブル: Excelで作成したテーブル名(例: Table1)を選択します。
注意点
- Excelファイルがテーブル形式であること
Excel内でデータ範囲を選択し、「挿入」タブから「テーブル」を選択してテーブル化します。テーブル化されていない場合、「表内に存在する行を一覧表示」アクションが正しく動作しません。 - 列名の確認
Excelの列名が正しく設定されていることを確認します。今回は「Link」と「Link代替」列が正しく存在していることが重要です。 - ファイルの保存場所
ファイルはOneDrive for BusinessまたはSharePointのドキュメントライブラリに保存されている必要があります。ローカルドライブに保存されているファイルは選択できません。
ステップ3: それぞれに適用する (Apply to each)
取得したExcelデータの各行をループ処理し、SharePointリストにアイテムを作成・更新します。このステップでは、複数行のデータを自動的に処理できるようになります。
手順
- 「それぞれに適用する」アクションを追加
「新しいステップ」をクリックし、「それぞれに適用する (Apply to each)」アクションを選択します。 - ループ対象を設定
「表内に存在する行を一覧表示」アクションの出力を指定します。具体的には、@outputs('表内に存在する行を一覧表示')?['body/value']
を設定します。 - ループ内にアクションを追加
ループ内で以下のアクションを追加します: アクション1: SharePointリストにアイテムを作成する- 「SharePoint」コネクタを選択
「新しいステップ」をクリックし、「SharePoint」を検索して「アイテムの作成 (Create item)」アクションを選択します。 - アクションの設定
以下の項目を設定します:- サイトアドレス: SharePointサイトのURLを指定します。
- リスト名: 「ListTest6」を選択します。
- タイトル: Excelの「タイトル」列を指定します(例:
@item()?['タイトル']
)。 - HyperLink: 一時的にExcelの「Link」列を指定します(後で更新します)。
- 「SharePointにHTTP要求を送信します」アクションを追加
ループ内で「SharePointにHTTP要求を送信します (Send an HTTP request to SharePoint)」アクションを追加します。 - アクションの設定
以下の項目を設定します:- サイトアドレス: SharePointサイトのURLを指定します。
- 方法: PATCHを選択します。
- URI:
_api/web/lists/GetByTitle('ListTest6')/items(@{outputs('項目の作成')?['body/ID']})
- ヘッダー:
{ "Accept": "application/json;odata=verbose", "Content-Type": "application/json;odata=verbose", "IF-MATCH": "*" }
- 本文:
{ "HyperLink": { "Description": "@{items('それぞれに適用する')?['Link代替']}", "Url": "@{items('それぞれに適用する')?['Link']}" } }
- HTTPメソッドの選択:
PATCHを選択することで、既存のアイテムを部分的に更新することができます。POSTは新規作成に使用されるため、ここではPATCHが適切です。 - IF-MATCHヘッダー:
"IF-MATCH": "*"
を設定することで、ETagによる競合を回避します。これにより、任意の状態でアイテムを更新できるようになります。 - HyperLinkのフォーマット:
JSON形式でDescription
(代替テキスト)とUrl
(リンクURL)を正しく設定します。この形式により、SharePointリストの「ハイパーリンクまたは画像」列が期待通りに動作します。 - URIの構成:
URIは、特定のSharePointリストアイテムを指定するためのものです。@{outputs('項目の作成')?['body/ID']}
によって、先ほど作成したアイテムのIDを動的に取得しています。
- 「SharePoint」コネクタを選択
注意点
- ループアクションの名前確認:
Power Automateでは、「それぞれに適用する」アクションがデフォルトでApply_to_each
と呼ばれることが多いですが、ユーザーの環境によっては異なる名前になっている場合があります。実際のフローの名前に合わせて、items('それぞれに適用する')
の部分を正しく設定してください。 - HTTPリクエストのエラー処理:
フロー実行中にHTTPリクエストが失敗した場合、原因を特定するためにエラーメッセージを確認し、設定を見直す必要があります。特にURIやヘッダーの設定ミスがよくあります。 - JSONフォーマットの正確性:
JSON本文のフォーマットが正しいことを確認してください。特に、Description
とUrl
のフィールド名がSharePointリストの列設定と一致していることが重要です。
ステップ4: フローの実行と確認
フローを保存し、実際に実行して動作を確認します。問題が発生した場合は、エラーログを参考に修正を行います。
手順
- フローを保存
フローの編集画面で「保存」ボタンをクリックします。 - フローを実行
「テスト」ボタンをクリックし、「今すぐテスト」を選択してフローを手動で実行します。 - SharePointリストの確認
SharePointサイトにアクセスし、リスト「ListTest6」を開きます。Excelから取り込んだURLと代替テキストが「HyperLink」列に正しく反映されていることを確認します。
デバッグポイント
- SharePointリストのHyperLink列:
URLと代替テキストが正しく表示されているかを確認します。リンクをクリックして、期待通りに動作するかもチェックしましょう。 - エラーログの確認:
フロー実行中にエラーが発生した場合、「詳細」ボタンをクリックして、エラーメッセージを確認します。エラー内容に基づいて設定を見直します。 - Excelデータの確認:
Excelファイル内のLinkとLink代替列に正しいデータが入力されているかを確認します。不正なURLや空白が原因でエラーが発生することがあります。
よくあるエラーとその解決策
フローを構築する過程で、いくつかのエラーに直面しました。以下に、そのエラーと解決策をまとめます。これらの情報が、同じような問題に直面している方の助けになることを願っています。
エラー1: ETag 値の不一致
エラーメッセージ:
アクション 'SharePoint_に_HTTP_要求を送信します' に失敗しました: 要求 ETag 値 '' がオブジェクトの ETag 値 '"e1e34f87-c651-446d-a06b-ed7f017aa140,1"' と一致しません。 clientRequestId: be0790f9-c165-4165-acb4-7c6779c7a51b serviceRequestId: 96d567a1-401a-4000-2292-9d541b5de25b
原因: SharePointリストで同時実行制御が有効になっており、アイテムを更新する際に正しいETagが必要となるためです。ETagは、アイテムのバージョン管理に使用され、フローが最新のデータに基づいてアイテムを更新することを保証します。
解決策: HTTP要求のヘッダーに"IF-MATCH": "*"
を追加することで、ETagのチェックをスキップし、任意の状態でアイテムを更新できるようにします。これにより、競合エラーを回避できます。
修正後の設定:
"headers": {
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
"IF-MATCH": "*"
}
ポイント解説:
- IF-MATCHヘッダー:
"IF-MATCH": "*"
を設定することで、SharePointはETagの値に関係なくアイテムの更新を許可します。これにより、フローがETagの一致を要求せずにアイテムを更新できるようになります。
エラー2: HyperLink列に代替テキストが反映されない
エラーメッセージ:
'HyperLink' フィールドに代替テキストが設定されない
原因: HyperLink列に設定する際のフォーマットが不適切であったため、代替テキストが正しく反映されませんでした。特に、JSON形式でDescription
とUrl
を正しく設定しなかった場合に発生します。
解決策: HyperLink列にはJSON形式でDescription
(代替テキスト)とUrl
(リンクURL)を正しく設定する必要があります。以下のように修正します。
修正後の本文:
{
"HyperLink": {
"Description": "@{items('それぞれに適用する')?['Link代替']}",
"Url": "@{items('それぞれに適用する')?['Link']}"
}
}
ポイント解説:
- JSON形式の正確性:
SharePointの「ハイパーリンクまたは画像」列は、JSONオブジェクトとしてDescription
とUrl
を受け取ります。これらを正しく設定することで、リンクの表示名とURLが正確に反映されます。 - 動的コンテンツの参照:
@{items('それぞれに適用する')?['Link代替']}
と@{items('それぞれに適用する')?['Link']}
を使用して、Excelから取得した各行のデータを動的に挿入します。
エラー3: ハイパーリンク列の内部名が異なる
エラーメッセージ:
パラメーター __metadata はメソッド GetById に存在しません。
原因: SharePointリストのハイパーリンク列の内部名が正しく設定されていないため、正しいフィールドにデータを送信できていませんでした。特に、列の内部名が誤っている場合やスペルミスがあると、このエラーが発生します。
解決策: SharePointリストの列の内部名を正しく確認し、それに基づいてフローの設定を修正します。内部名は、SharePointリストの設定画面で確認できます。
修正方法:
- SharePointリストの設定を確認
- SharePointサイトにアクセスし、「ListTest6」リストを開きます。
- 「設定」アイコン(歯車のマーク)をクリックし、「リストの設定」を選択します。
- 「ハイパーリンクまたは画像」列を選択し、URLの末尾に表示される「Field=HyperLink」などの内部名を確認します。
- フローの修正
フローの「SharePointにHTTP要求を送信します」アクション内の"HyperLink"
フィールドを、確認した内部名に正しく設定します。例えば、内部名がHyperLink
であればそのまま使用しますが、異なる場合は正しい名前に変更します。
ポイント解説:
- 内部名の正確な使用:
SharePointの列には表示名と内部名があります。内部名は自動生成され、スペースや特殊文字が含まれることがあります。必ず内部名を確認して使用することが重要です。 - 列の追加や変更時の注意:
列を追加したり名前を変更したりすると、内部名も変更されることがあります。そのため、フロー作成後に列名を変更した場合は、フローも再設定する必要があります。
成功までのポイント
フローを正しく構築し、エラーを解決するためには、以下のポイントに注意しました。これらのポイントを押さえることで、フローの構築がスムーズに進み、期待通りの結果を得られます。
列名と内部名の確認
ポイント:
- SharePointリストの列名と内部名の確認
フローを構築する前に、SharePointリストの列名と内部名を正確に確認することが重要です。内部名が異なると、正しくデータを送信できません。 - Excelの列名の一致
Excelファイル内の列名が、フローで指定する列名と一致していることを確認します。特に、Link列とLink代替列の名前が正確であることが重要です。
具体例:
- SharePointリスト「ListTest6」のハイパーリンク列の内部名が
HyperLink
であることを確認。 - Excelファイル「ハイパーリンクExcelテスト.xlsx」において、URLが入った列名が「Link」、代替テキストが入った列名が「Link代替」であることを確認。
JSONフォーマットの正確性
ポイント:
- HyperLink列へのJSON形式でのデータ送信
SharePointリストの「ハイパーリンクまたは画像」列には、Description
(代替テキスト)とUrl
(リンクURL)をJSONオブジェクトとして送信する必要があります。正しいフォーマットでデータを送信することで、期待通りにリンクが表示されます。 - 動的コンテンツの正確な参照
Power Automateの式を使用して、Excelから取得したデータを正しく参照することが重要です。特に、ループ内で正しいアクション名を使用して動的コンテンツを参照する必要があります。
具体例:
{
"HyperLink": {
"Description": "@{items('それぞれに適用する')?['Link代替']}",
"Url": "@{items('それぞれに適用する')?['Link']}"
}
}
このように、Description
とUrl
を正しく設定します。
フローアクションの正しい配置
ポイント:
- アクションのネスト
「SharePointにHTTP要求を送信します」アクションは、「それぞれに適用する」アクションの中に正しく配置する必要があります。これにより、ループ内の各行データに基づいて動的にデータを送信できます。 - 動的コンテンツのスコープ
ループ外で動的コンテンツを参照しようとすると、エラーが発生する可能性があります。アクションが正しいスコープ内に配置されていることを確認します。
具体例:
- 「SharePointにHTTP要求を送信します」アクションが「それぞれに適用する」アクションの中に配置されていることを確認。
エラーハンドリングの実装
ポイント:
- エラー発生時の対処法
フロー実行中にエラーが発生した場合、エラーメッセージを詳細に確認し、原因を特定して修正します。特に、JSONフォーマットやヘッダーの設定ミスが多いです。 - テストとデバッグ
フローを作成した後は、少数のデータでテストを行い、正しく動作するか確認します。問題があれば、エラーログを基に修正を行います。
具体例:
- フロー実行後にSharePointリストを確認し、HyperLink列にURLと代替テキストが正しく反映されているか確認。
- エラーが発生した場合、フローの実行履歴からエラーメッセージを確認し、設定を見直す。
成功と失敗から学んだこと
失敗からの学び
フローを構築する過程で、いくつかのエラーに直面しました。これらのエラーは一見難解に思えましたが、原因を特定し、適切な対策を講じることで解決できました。
エラー1: ETag 値の不一致
最初に直面したエラーは、ETag値の不一致によるものでした。このエラーは、SharePointリストで同時実行制御が有効になっていることが原因でした。具体的には、フローがアイテムを更新する際に正しいETagが必要とされ、これが一致しないためにエラーが発生しました。
解決策として、HTTP要求のヘッダーに"IF-MATCH": "*"
を追加しました。これにより、ETagのチェックをスキップし、任意の状態でアイテムを更新できるようになりました。この設定変更により、競合エラーを回避し、フローが正常に動作するようになりました。
エラー2: HyperLink列に代替テキストが反映されない
次に直面した問題は、HyperLink列に代替テキストが正しく反映されないというものでした。これは、HyperLink列に設定する際のJSONフォーマットが不適切であったためです。
解決策として、HyperLink列にはJSON形式でDescription
とUrl
を正しく設定する必要があることに気づきました。具体的には、以下のように設定を修正しました。
{
"HyperLink": {
"Description": "@{items('それぞれに適用する')?['Link代替']}",
"Url": "@{items('それぞれに適用する')?['Link']}"
}
}
これにより、代替テキストとURLが正しく反映され、SharePointリスト上で期待通りのリンクが表示されるようになりました。
成功したポイント
失敗から多くを学び、以下のポイントに注意することでフローを無事に成功させることができました。
- 正確な列名と内部名の確認
SharePointリストとExcelファイルの列名を正確に一致させることが重要です。特に、SharePointの内部名を正しく使用することで、データの送信が正確に行われます。 - 適切なJSONフォーマットの使用
HyperLink列に対しては、JSON形式でDescription
とUrl
を設定する必要があります。このフォーマットを守ることで、代替テキストとURLが正しく反映されます。 - フローアクションの正しい配置
「SharePointにHTTP要求を送信します」アクションを「それぞれに適用する」アクションの中に配置することで、動的コンテンツが正しく参照され、エラーを回避できます。 - エラーハンドリングの実装
フロー実行中にエラーが発生した場合、エラーメッセージを詳細に確認し、設定を見直すことで迅速に問題を解決できます。
まとめ
Power Automateを活用して、ExcelからSharePointリストへのデータ自動登録を実現しました。このプロセスでは、いくつかのエラーに直面しましたが、試行錯誤を経て解決策を見つけることができました。以下のポイントを押さえることで、同じような課題に直面している方もスムーズにフローを構築できるはずです。
- 正確な列名と内部名の確認
SharePointリストとExcelファイルの列名が正確に一致していることを確認します。内部名の確認は特に重要です。 - 適切なJSONフォーマットの使用
HyperLink列に対しては、JSON形式でDescription
とUrl
を正しく設定することが不可欠です。 - フローアクションの正しい配置
「SharePointにHTTP要求を送信します」アクションは「それぞれに適用する」アクションの中に配置し、動的コンテンツを正しく参照できるようにします。 - エラーハンドリングの実装
フロー実行中にエラーが発生した場合は、エラーメッセージを詳細に確認し、原因を特定して迅速に対処します。
この記事が、皆さんの業務効率化に少しでも役立てば幸いです。ぜひ、この記事を参考にPower Automateを活用してみてくださいね!うまくいったらぜひコメントで教えてくれると嬉しいです。応援しています!
参考にした情報
- Qiita: PowerAutomateでSPOリストのハイパーリンク代替テキストを設定
- Microsoft公式ドキュメント: SharePoint REST API
- Power Automateの公式ガイド
- SharePoint REST APIの利用方法
この記事を参考に、皆さんもぜひチャレンジしてみてください!応援しています!
コメント