SharePoint/OneDriveのファイルをデスクトップアプリで開くためのショートカットの作り方

Qiitaからの記事移行

概要

  • SharePoint OnlineのドキュメントライブラリやOneDriveに置かれたOfficeファイルを、デスクトップから、デスクトップアプリで開く方法です。
  • SharePointの詳細設定でリンククリック時にデスクトップで開く設定はできるのですが、Web画面を一旦開く必要があり、デスクトップから直接開けると便利です。
  • Officeファイル限定です。設定すると以下のようなデスクトップアイコンができあがります。

作成方法

SharePointの場合

Excelファイルのショートカット作成を例にします。

  1. SharePointのファイル→ファイル名右側の「︙」→詳細をクリック
    ※又はファイルにチェックをつけて右上のⓘマーク
  2. 右のサイドバー→下の方の「パス」クリップボードをクリックでファイルのパスをコピー

  3. Windowsのデスクトップ→新規作成→ショートカット

  4. 「項目の場所」のテキストボックスに「ms-excel:先程コピーしたURL(https://~)」を貼り付ける

  5. ショートカットの名前をつける
  6. これで、作成されたショートカットをクリックするとデスクトップのExcelSharePointのファイルが開きます。
  7. 編集結果もちゃんと反映されています。
  8. 前提条件として、デスクトップのOfficeも同じ365アカウントでログインしていないと認証できません。

普通にms-excel:https://~で開くと読み取りモードとなり、編集をクリックして初めて編集可能になります。
※個人的にはこれが使いやすい。

開いたときに編集モードにしたい場合はms-excel:ofe|ofc|u|https://~とします。
SharePointから開くときにアクセスしているURLと同じです。


ExcelなどのOfficeデスクトップアプリからもコピーできます

ファイル→情報→パスのコピーからコピーします。


アプリごとの開き方まとめ

Office モード ショートカット
Excel 読取モード ms-excel:https://~
Excel 編集モード ms-excel:ofe|ofc|u|https://~
Word 読取モード ms-word:https://~
Word 編集モード ms-word:ofe|ofc|u|https://~
PowerPoint 読取モード ms-powerpoint:https://~
PowerPoint 編集モード ms-powerpoint:ofe|ofc|u|https://~



Teams内のOfficeファイルの場合

Teamsのファイルも開けます。

  1. Teamsのファイルタブ→右上の「SharePointで開く」をクリックする。
  2. 後は上記のSharePointの手順でショートカットを作成します。

    ※Teamsでチームを作成すると裏側にSharePointサイトが作成され、TeamsのファイルはSharePointの機能で管理されます。

URIスキーマ

ms-excel:の部分はWindowsURIスキーマです。 WebからTeamsなどのデスクトップアプリを起動する際に使用されるものですね。
スキーマの一覧は下記から確認できます。
Wordファイルならms-wordパワポならms-powerpointとすると、それぞれのアプリで開けます。
https://docs.microsoft.com/ja-jp/office/client-developer/office-uri-schemes

頻繁に作成するのであればPowerShellで自動化してやると便利です。 自分の環境のURLでしか試してませんが一応コードを載せておきます。

Add-Type -AssemblyName System.Web
$ErrorActionPreference = 'stop' 

$url = Read-Host "SharePointURLを入力してください。"
$url -match "^https?://[a-z0-9\-]+?(-my\.sharepoint\.com|\.sharepoint\.com)\/" | Out-Null

if($Matches.Count -eq 0){
    Write-Host "SharePointまたはOneDriveのパスを貼り付けてください"
    return
}

[string]$prefix = switch($Matches.1){
    {$_ -eq '-my.sharepoint.com'}{
        'OneDrive'
        break
    }
    Default{
        'SPO'
    }
}
$Matches.Clear()

[string]$fileName = [System.Web.HttpUtility]::UrlDecode($url.Split('/')[-1])
[string]$fileExt = $fileName.Split(".")[-1]
[string]$uriSchema = switch($fileExt){
    {$_ -in 'xls','xlsx','xlsm'}{
        'ms-excel:'
        break
    }
    {$_ -in 'doc','docx','docm'}{
        'ms-word:'
        break
    }
    {$_ -in 'ppt','pptx','pptm'}{
        'ms-powerpoint:'
        break
    }
    Default{
        ''
    }
}

$shortcutName = "[$prefix]$fileName"

$shell = New-Object -ComObject WScript.Shell
$Shortcut = $shell.CreateShortcut("$home\Desktop\{0}.url" -f $shortcutName)
$Shortcut.TargetPath = "{0}{1}" -f $uriSchema, $url
$Shortcut.Save()

Write-Host "ショートカットを作成しました。>$shortcutName"

補足

OneDriveやSharePointのフォルダは、デスクトップのOneDriveで同期するとエクスプローラで開け、ローカルファイルと同じようにショートカットを作成できます。
SharePointだとサイトごとに同期するのが面倒だったり、 企業によっては同期設定が禁止されているところもあると思います。
この方法であればショートカットを作ることができます。