SharePointドキュメントライブラリからいい感じにファイルパスを取得するブックマークレット
モチベーション
ファイル格納場所を共有するときに不便なので作った
動き
Excel, PowerPoint, Wordファイルの場合は、フォルダ移動してもリンク切れにならない_layouts/15/Doc.aspx?sourcedoc=形式のリンクにする
ファイルを選択した場合、選択したファイルのリンクを作成
https://gyazo.com/3ee2efda3a05d2ab8b8bbb482a656aed
https://gyazo.com/cea0869f99918ec53be4181270bf117e
ファイルを選択しない場合は、直下のファイルをすべて列挙する
https://gyazo.com/03e123c91a18389440ef95ddd47b5317
https://gyazo.com/55016c38f29430ea67d4c588adf91c86
code:js
javascript: (async () => {
const site = location.pathname.split('/')2; const docList = location.pathname.split('/')3; const id = new URLSearchParams(location.search).get('id');
const path = id ? id.split('/').slice(3).join('/') : docList;
const baseurl = ${location.origin}/sites/${site};
const url = ${baseurl}/_api/web/GetFolderByServerRelativeUrl('${path}')/Files;
const response = await fetch(url, {
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json;odata=verbose'
}
});
const files = await response.json();
let text = <${baseurl}/${path}>\n;
let html = <a href="${baseurl}/${path}">${baseurl}/${path}</a><br />;
for (let file of files.d.results) {
const ext = file.Name.split('.').pop();
const docUrl = /docx?|pptx?|xlsx?/.test(ext)
? ${baseurl}/_layouts/15/Doc.aspx?sourcedoc={${file.UniqueId}}
: ${baseurl}/${path}/${file.Name};
console.log(file.Name, file.LinkingUri, file.UniqueId, docUrl);
if (selectedItems.length === 0 || selectedItems.includes(file.Name)) {
text = text + docUrl + '\n';
html = html + - <a href="${docUrl}">${file.Name}</a><br />;
}
}
const blob = new Blob(html, { type: "text/html" }); const richTextInput = new ClipboardItem({ "text/html": blob });
alert('copy!');
})();
改善点
選択アイテムのDOM構造が変わった場合は、追随しなければならない
_api/web/GetFolderByServerRelativeUrlでのファイル名でのフィルタ方法がわからなかったため、全取得している
フォルダ直下のファイルが増えた場合に困りそう
defaultのリンクのコピーとの違いがいまいちわかっていない…
デフォルトだと複数ファイルのファイパスコピーができないんですよ・・・あれ弊社テナントだけ?meganii.icon
1ファイルコピーするだけで、次の①から④をコピーしないとファイルパスを取得できないと思っていたが、もしかして他にやり方がある?これ死ぬほどめんどくさいmeganii.icon
①リンクをコピー
https://gyazo.com/675b0c39049083a7a1cdbd7f4ec3f786
②「リンクのコピー」から赤枠を選択
https://gyazo.com/a8402adfef5b173588117ece0db4c17a
③「リンクの設定」から「既存アクセス権を持つユーザー」を選択
https://gyazo.com/9649ab12a748ff339e218c038cf1e9f9
④リンクをコピー
https://gyazo.com/3a799a305c5500c4b0b61f6c57baf215