技術情報ブログ
SharePoint
2025.07.09

SharePoint Online の 共有リンクを印刷可能なレポート化するまで

SharePoint Online の 共有リンクを印刷可能なレポート化するまで
みやみや

こんにちは、みやみやです。

普段は「バス予報」という弊社サービスのシステム開発のマネジメントをしていますが、最近は、古くからある Azure の既存環境のコード化するのが楽しい気がしてきています

今回の記事は、1 年ほど前に、「SharePoint のドキュメントライブラリにて、作成された共有リンクのレポートを作成する」というお題を自分に課して、自主練したときのゆるい記事です

当時を思い出しながら、実際に帳票のようなレポート化するまで、どのような思考・手順で進めたのかを記載します

 

1. 調査

公式に SharePoint サイトでのファイルとフォルダーの共有に関するレポート という情報がありました

ただ、こちらの記載が気になってしまいました

クリックされていない直接メールで送信されたリンクと、[すべてのリンク] はレポートに含まれません。

それでもどうにかできないのかな?っと調べたところ、公式の情報ではないですが、隠しリストの Sharing Links (言語設定が日本語だと共有リンク) で取得できそうということが判りました
※公式の情報では見つけられなかったので、情報ソースは載せておりません
※本情報を利用するときには、自己責任でご利用ください

実業務では、リスクを「許容(保有)する」「回避する」というような、リスクマネジメントを行いますよね

今回は自主練ですし、取得したデータを帳票にするという一連の流れがやりたいので、許容して進むことにします

そして、レポートにするときには、Excel を使うことにしました

Excel Online は Office Script でマクロが組めPower Automate からスクリプトから実行できるので、Microsoft 365 を契約していることを前提にすると、Excel は使える状態だと思いますので、とても相性が良さそうです

 

2. 共有したときの状態をチェック

SharePoint Online に環境を作り、様々な状態で、共有リンクとレポート対象となるリストアイテムの権限(RoleAssignments)の状態、隠しリストのデータのチェックしていきました

  • 一度も共有リンクが作られていないとき

  • サイト内のユーザーに共有したとき

  • 共有リンクを編集して、サイト内のユーザーを追加したとき

  • 共有リンクを編集して、サイト外ユーザーを追加したとき

  • 共有リンクを編集して、テストグループを追加したとき

  • 共有リンクを編集して、ゲストユーザーを追加したとき

  • 共有リンクを編集して、外部ユーザーを追加したとき

  • 外部ユーザーで共有されたファイルを閲覧したとき

  • 共有を停止したとき

  • 「すべてのユーザー」で共有したとき

  • 「すべてのユーザー」と並行して「選択したユーザー」にも共有したとき

ちなみに、状態を見るときには、PnP.PowerShell を使いました

 

3. Power Automate を使って、共有リンクの情報を Excel ファイルに登録

対象となるドキュメントライブラリに対して、手順 2 で把握した情報を Excel のテーブルに登録するフローを作ります

取得したデータの例はこちら

  • サイトユーザーの情報

    _api/web/SiteUsers?$select=Id,Title,PrincipalType,Email,IsEmailAuthenticationGuestUser,IsShareByEmailGuestUser,IsSiteAdmin
  • 共有リンクの情報を取得する API

    _api/web/lists/getbytitle('共有リンク')/items?$select=Id,SharingDocId,AvailableLinks
  • ドキュメントライブラリの情報を取得する API

    _api/web/lists/getbytitle('ドキュメント')/items?$select=HasUniqueRoleAssignments,File/Length,File/Name,File/TimeCreated,File/TimeLastModified,Id,Title,Author/EMail,Author/Title,Editor/EMail,Editor/Title,FileRef,RoleAssignments/Member/Title,RoleAssignments/Member/PrincipalType,RoleAssignments/Member/Users,RoleAssignments/Member/Users/Title,RoleAssignments/Member/Users/Email,RoleAssignments/Member/Users/IsEmailAuthenticationGuestUser,RoleAssignments/Member/Users/IsShareByEmailGuestUser,RoleAssignments/Member/Users/AadObjectId&$expand=File,RoleAssignments/Member,RoleAssignments/Member/Users,Author,Editor&$orderby=Id

例ではちょっと多めに取ってしまっています

取得したデータの例

 

4. 取得したデータを帳票っぽく出せるような Office Script を作成する

下記のようなスクリプトを書きました

  • データが登録されたテーブルから、帳票を作るスクリプト (Report)

  • 手順 3 の前に流す、登録するテーブルをクリアするスクリプト (ClearData)

帳票は、見た目を考えてこういう形になりました

取得したデータを帳票にする見た目

罫線に関しては、セルのデータを 1 つ 1 つ判定して線を弾いたりしているのではなく、Office Script で条件付き書式を作っていて、それをセルに当てはめることで実現しています

 

5. Power Automate と Office Script を合わせて 1 つのフローにする

一旦全体感はこんな感じです

Power Automate と Office Script を合わせて 1 つのフローにする

スコープ部分を少し開くとこんな感じになっています

Power Automate と Office Script を合わせて 1 つのフローにする(スコープ部分1)
Power Automate と Office Script を合わせて 1 つのフローにする(スコープ部分2)

Power Automate を触っている方は、「こういうことやっているんだろうな」とイメージが付くかと思います

 

考察

初めて Office Script を触ってみたりと、普段扱ってない技術ばかりでとても時間がかかりましたが、一応完成して動いてくれたら嬉しいものです

印刷レイアウトも調整してはいますが、昔の記憶だと、プリンターによって余白が微妙に違うとか、印刷位置が違うとか、色々あるかとは思います

ただ、帳票として Excel を使うというアプローチは、ローコードの時代でも使えそうです

miyamiya

みやみや

みやみやさんのブログ一覧はこちら

ビジュアル系プログラマー、ビジュアル系 PM を自称して 20 年近くが経ちました

弊社 MaaS 製品全般で、開発・運用側のマネジメントをしながら、時々開発もしています

シェアする
記事カテゴリ
最新記事
2025.07.09

SharePoint Online の 共有リンクを印刷可能なレポート化するまで

2025.06.25

SharePoint:多言語化対応について

2025.06.18

SharePoint: 「スキーマを含むCSV」でリストを移行する(後編)  

2025.06.11

SharePoint: 「スキーマを含むCSV」でリストを移行する(前編)

2025.06.04

Power Apps:テストやってますか? テストスタジオの使い方のご紹介(2) 実践編

データ構造.Net Core Test Explorerレスポンシブ技術カスタマイズ委任自動化したクラウド フロー運用開発環境filter query管理システム列StyleDLPポリシー地方自治体MLモデル駆動型アプリSortByColumns関数Dataverse for Teams入門ItcomponentVBAフローの種類選択肢列環境sortガバナンス登録日StudioTestCopilot Studiot共有リンクPower AppsTypeScriptitem関数初心者情報技術ダイアログエラーインスタント クラウド フロー参照列本番環境ソートerror notification更新者AICanvas自治体DXレポート化Power PlatformHTMLGoogle Maps中級者メッセージIDコンポーネントエクセルスケジュール済みクラウド フローChatGPTライセンスmultiple itemエラー通知更新日生成系AITest Studio生成AI自治体SharePointEF CoreMarker Clustererキャンバスアプリメールdialogerrorレスポンシブ レイアウトOpenAI環境構築手順複数項目削除変更Copilotテスト事例ExcelマイグレーションRANK()関数DatePickerfirst()関数Tips復元responsive layoutオープンAIpipelineシェアポイントフォルダ外部DBlicenseテストスタジオ活用Power AutomateFramework CoreDynamics 365 SalesDropdownnest新機能restoreデータ行の制限チャットGPTCI/CD便利機能ゴミ箱連携添付ファイルコントロール使い方サイトブランド化C#Attribute directivesMicrosoft Translatorview入れ子変数Power BI引き継ぎgalleryパイプラインカレンダー完全削除接続ファイルサイズ基本知識フォントカスタマイズattributeO/Rマッパーマーカークラスタリングライブラリビュー動的リスト検索個人列退職ギャラリーDevOpsCalendarモデル駆動型データフローフルリモートワークPowerAutomateブランドセンターvalidationazure sql databasetailwindcssアクセス制限collectionMicrosoft 365グループユーザー列所有者を変更スクロールMicrosoft 365Teamsセキュリティロールrecycle binアーティサンX-SP Designテーマ作成ローコードCase式マルチテナント承認コレクションセキュリティグループSharePoint Online異動コンテナ簡易在庫管理ローコード開発ビジネスルールアクセス許可Artisanスライドショーデザイン拡張AngularHTTP Requestドロップダウンメニューリマインド複数の添付ファイル送信元リストLoopショートカットキー時間外非エンジニアDataverseSharePoint Framework転職Slide showMicrosoft365AccessCSSBreakpointObserverSet承認フローメールの送信非表示Microsoftshortcut key通知体験談JavaScriptSPFx主キー比較移行InfoPathxUnitメディアクエリForAllform差出人アプリdesignconcat関数ファイル勉強表示サンプルCopilot Studio社内ポータル多言語化MatTable.Net Core 3.1スマホUpdateContextエクスポートインスタントクラウドフロー[市民開発者JSON文字制限フィルター クエリ内製化切替samplePowerAppsグループウェアMUIAngular MaterialVSCodePCロードマップインポート自動化したクラウドフロー構築デザインフロー実行ドキュメント ライブラリ市民開発登録者X-SPNFCタグエンゲージメントMultilingual
PageTop
ページトップに戻る