SharePointのライブラリのファイルのパスを取得してみた

SharePointでファイル管理している場合、「ここにファイル置きました」ってメール送ることがよくあります。日本企業であれば、フォルダ名は当然日本語のことが多く、そのままリンクを取得するとエンコードされて「/sites/portal/DocLib/01.%E8%A6%81%E4%BB%B6%E5%AE%9A%E7%BE%A9/…」
のように可読性が下がりますよね。

私が欲しいのは
「/sites/portal/DocLib/01.要件定義/01.業務フロー/…」
のようにパッと見た時にどの階層に配置されているのかがわかるように取得したいんです。

というわけで色んな方法でリンクを取得して最適解を求めてみましょう。

理想:https://<テナントURL>/sites/<サイトパス>/DocLib/01.要件定義/02.業務フロー/帳票登録/Excel.xlsx

まずは、モダンUIの「リンクのコピー」。

https://<テナントURL>/:f:/s/<サイトパス>/EitLQJUmawNBmr9fvmi3gdtdhvEZ8wf9ziNVaR19WdjL7A?e=24XSLS

そのまま取得すると上記のようになります。「/:f:/s/」の部分はリンクコピー時に選択した編集可否によって変わるようです。後半のハッシュっぽいのは気にしません。短いからいいんですが、本記事の目的とは合致しません。

  • 組織のユーザ(編集許可) ⇒/:f:/s/
  • 組織のユーザ(編集不可) ⇒/:x:/s/

「既定のアクセス権を持つユーザ」「特定のユーザ」の場合は形式が変わります。

https://<テナント>/:x:/r/sites/<サイトパス>/DocLib/01.%E8%A6%81%E4%BB%B6%E5%AE%9A%E7%BE%A9/02.%E6%A5%AD%E5%8B%99%E3%83%95%E3%83%AD%E3%83%BC/%E5%B8%B3%E7%A5%A8%E7%99%BB%E9%8C%B2/Excel.xlsx?d=w659496ba14dwgsc8da72d11a094f5fac7&csf=1&e=HG7Z6b

例によって後半は気にしません。「/:x:/r/」以降はファイルへのパスになりました。デコードされているのでやっぱり長いです。「既定の…」も「特定の…」も「/:x:/r/」で変わりませんでした。匿名はテナントで禁止されているので試していません。右クリックの「リンクのコピー」はこれらと同じです。

なお、このエンコードされたURL、インターネット上の適当なサイトでデコードした上で共有している方もいらっしゃいますが、特にSharePoint Onlineの場合、止めた方がいいです。パスをそのまま外部サイトのフォームに入力しているのです。情報漏洩の元です。

どうしてもデコードしたいは、デコードするだけの処理を書いたHTMLファイルをローカルで作成してひっそりとやりましょう。またはそれをSharePointに展開するのもありだと思います。もっと手っ取り早くやりたい場合は、開発者ツール(F12で起動)のコンソールでやってしまうのが一番早いですかね。

decodeURI("<エンコードされたパス>")

ブラウザのURLそのままコピーしてファイル名を追記するのもありだと思います。ただこの場合もペーストするとエンコードされてしまいますね。

https://<テナント>/sites/<サイトパス>/DocLib/Forms/AllItems.aspx?id=%2Fsites%2F<サイトパス>%2FDocLib%2F01%2E%E8%A6%81%E4%BB%B6%E5%AE%9A%E7%BE%A9%2F02%2E%E6%A5%AD%E5%8B%99%E3%83%95%E3%83%AD%E3%83%BC%2F%E5%B8%B3%E7%A5%A8%E7%99%BB%E9%8C%B2

次はクラシック表示。下記手順です。

①パンくずリストから一つ上の階層を表示
②フォルダを選択した状態でリボンの「プロパティの表示」を選択


③フォルダ名リンクを右クリック「ショートカットのコピー」

https://<テナント>/sites/<サイトパス>/DocLib/01.要件定義/02.業務フロー/帳票登録

うまくいきました。後はファイル名書けばOKです。
なお、IEとEdgeのみで日本語取得できました。Chromeはエンコードされます。他ブラウザはわかりません。(全部そのままメモ帳に張り付けた結果を言ってます)

プロパティの表示自体はモダンUIでも出来るんですが、リンクになっていないため同じ手は使えません。

同じようにファイル自体をプロパティ表示してからでもショートカットのコピーは可能です。ただし、結果が伴いません。

https://<テナント>/sites/<サイトパス>/_layouts/15/Doc.aspx?sourcedoc=%7B651236BA-19DD-4C8D-A72D-11A094F5FAC7%7D&file=Excel.xlsx&action=default&mobileredirect=true

別案としてエクスプローラで開いてからパスをコピーすることもできますが、ブラウザのURLコピー同様やはりペーストした段階でエンコードされます。

というわけで一番簡単なのは

「IE(or Edge)でクラシック表示にした上で、一つ上の階層のフォルダをプロパティ表示し、右クリックからショートカットのコピー、最後にファイル名を追記する」

ということになりました。はい、面倒ですね。URLコピーしてデコードツール作った方がよっぽど早いです。頑張りましょう。

なお、先日記事でも書いた「列の書式設定」「ビューの書式設定」ともにスクリプトを埋め込むことはできません。公式に謳われていますし、試しもしました。残念です。

これを、例えばファイル名の右横に「絶対パスを取得」的なリンクを出そうとするならば、おそらくSharePoint Frameworkを使うしかないのだと思います。いつかやりたいです。

(追記)続き書きました

https://muc365.com/2019/03/11/続sharepointのライブラリのファイルのパスを取得して/