Skip to content

自作OfficeアドインをWindows環境で簡単にサイドロードする

(VBAやVSTOやCOMではない)OfficeアドインをWindows環境でサイドロードするための方法として、Microsoftの公式サイトではこちらで紹介されているような方法が使えます。しかしながら、Mac版のOffice(特定のディレクトリにマニフェストファイルを入れるだけ)やOffice Online(画面の指示に従ってアップロードするだけ)と比べ、Windows版のOfficeはなぜか面倒臭い。もっと手軽にサイドロードできる方法を調べてみました。

結論から言ってしまうとレジストリエディタで

HKCU:\Software\Microsoft\Office\16.0\WEF\Developer

に名前も中身もマニフェストファイルへのフルパスが書かれたキーを追加すれば良いようです。

office-toolboxのソースコードを見ると動作原理がわかります。

function addManifest(application: string, manifestPath: string): Promise<any> {
  return (process.platform === 'win32')
    ? addManifestToRegistry(manifestPath)
    : addManifestToSideloadingDirectory(application, manifestPath);
}

実行されているプラットフォームに応じて処理を分けているようです。Windows環境の場合はaddManifestToRegistry関数が実行されます。

function addManifestToRegistry(manifestPath: string): Promise<any> {
  return querySideloadingRegistry(['Set-ItemProperty -LiteralPath $RegistryPath -Name "' + manifestPath + '" -Value "' + manifestPath + '"']);
}

レジストリへの追加部分はPowerShellが利用されているようです。

最後に、GUIで簡単にサイドロードできるようにするためのPowerShellスクリプトを書いておきます。

Add-Type -AssemblyName System.Windows.Forms
$dialog = New-Object System.Windows.Forms.OpenFileDialog
$dialog.Filter = "マニフェスト(*.xml)|*.xml"
$dialog.InitialDirectory = "C:\"
$dialog.Title = "ファイルを選択してください"

if($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK){
    Write-Output ($dialog.FileName + "をHKCU:\Software\Microsoft\Office\16.0\WEF\Developerに登録します。")
    Set-ItemProperty -LiteralPath HKCU:\Software\Microsoft\Office\16.0\WEF\Developer -Name $dialog.FileName -Value $dialog.FileName
}

上は追加用です。削除用は以下になります。

Add-Type -AssemblyName System.Windows.Forms
$dialog = New-Object System.Windows.Forms.OpenFileDialog
$dialog.Filter = "マニフェスト(*.xml)|*.xml"
$dialog.InitialDirectory = "C:\"
$dialog.Title = "ファイルを選択してください"

if($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK){
    Write-Output ($dialog.FileName + "をHKCU:\Software\Microsoft\Office\16.0\WEF\Developerから削除します。")
    Remove-ItemProperty -LiteralPath HKCU:\Software\Microsoft\Office\16.0\WEF\Developer -Name $dialog.FileName -ErrorAction SilentlyContinue
}

Officeアドインは相変わらず流行っていないようですが、単純にOfficeファイル内にウェブサイトを埋め込むためだけの用途にも利用できそうですね!

One Comment

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください