編集中のプレゼンテーション、スライドを取得する
using PowerPoint = Microsoft.Office.Interop.PowerPoint; public partial class ThisAddIn { PowerPoint.Presentation GetActivePresentation() { return this.Application.ActivePresentation; } PowerPoint.Slide GetActiveSlide() { return this.Application.ActiveWindow.View.Slide as PowerPoint.Slide; } : }
選択中のスライド、シェイプを取得する
using PowerPoint = Microsoft.Office.Interop.PowerPoint; public partial class ThisAddIn { PowerPoint.Selection GetSelection() { try { return this.Application.ActiveWindow.Selection; } catch (System.Runtime.InteropServices.COMException exc) { // TODO } return null; } PowerPoint.SlideRange GetSelectedSlideRange() { PowerPoint.Selection selection = GetSelection(); try { return (selection != null) ? selection.SlideRange : null; } catch (System.Runtime.InteropServices.COMException exc) { // TODO } return null; } PowerPoint.ShapeRange GetSelectedShapeRange() { PowerPoint.Selection selection = GetSelection(); try { return (selection != null) ? selection.ShapeRange : null; } catch (System.Runtime.InteropServices.COMException exc) { // TODO } return null; } public void Test() { PowerPoint.SlideRange selectedSlideRange = GetSelectedSlideRange(); PowerPoint.Slide firstSelectedSlide = selectedSlideRange[1]; PowerPoint.ShapeRange selectedShapeRange = GetSelectedShapeRange(); PowerPoint.Shape firstSelectedShape = selectedShapeRange[1]; } : }
スライドが選択されていない時にselection.SlideRangeを呼ぶとSystem.Runtime.InteropServices.COMExceptionが生じるようです。
同様に、シェイプが選択されていな時にselection.ShapeRangeを呼ぶと
System.Runtime.InteropServices.COMExceptionが生じるようです。
上図のようにスライド間にカーソルがあるときは、スライドは選択されていません。
得られたSlideRange, ShapeRangeのインデックスは1から始まります。
VSTOファイルのパスを取得する
レジストリに登録されている情報を利用して.vstoファイルのパスを取得する方法。
private const string REGKEY_ADDIN = @"Software\Microsoft\Office\PowerPoint\AddIns\MyPowerPointAddIn"; string GetVstoFilePath() { Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(REGKEY_ADDIN); if (regkey == null) { return null; } string manifest = regkey.GetValue("Manifest") as string; if (string.IsNullOrEmpty(manifest)) { return null; } int barIndex = manifest.LastIndexOf("|"); return (barIndex == -1) ? manifest : manifest.Substring(0, barIndex); }
上記はアドイン名がMyPowerPointAddInというアドインの場合です。使用する場合はREGKEY_ADDINの最後のアドイン名を適宜変更してください。
マーク
久しぶりにChromium OSのソースをsyncさせたらこんなのが出力されました。
面白かったので記念に。
Syncing work tree: 100% (86/86), done.
..77IIIIII7,.
.$IOOOOOOOOOOZ$:.
.IO8?OOOOOOZOOOOOOOO.
?=?~?ZO+D8888=+OZOOOOI.
.7$+I+++888$IIO$8+=OZZZOI.
.ZZ$$I?~I8$7?++?I7Z88888IZ:
~IZ$$7I~8OII?=~+I$Z8:++=ZD$
IZZZ$$7~8ZZ$I??I$7D8:+++??I.
I$ZZZ$$?=DOOZ$$ZOD8:=+++??I.
77OZZZ$$+=8DDDDDDO:=+++???I
.OOOOZZZ$$==7D,:::++++???I?
.$$OOOOZZZ$8~===+++++???I?.
7$OOOO$8=====+++++??II?..
?$ZO8:===+++++++?I???.
.77$D8+++++++=?+??..
,7$8Z===+++??
........
Your sources have been sync'd successfully.
アドインのインストーラを作成する
アドインプロジェクトの変更
インストーラを作成したアドインプロジェクトを開きます。ここではMyPowerPointAddInプロジェクトとします。
[1]http://code.msdn.microsoft.com/VSTO3MSI/Release/ProjectReleases.aspx?ReleaseId=729
リンク[1]からVSTO v3 Deployment Whitepaper downloads.zipをダウンロードします。
ダウンロードファイルの
VSTO v3 Deployment Whitepaper downloads\samples\CS\3. Inclusion list\VSTO v3 Deployment Demo\InclusionListCustomActions\TrustInstaller.cs
をMyPowerPointAddInプロジェクトに追加します。また、
System.Configuration.Install Microsoft.VisualStudio.Tools.Office.Runtime.v9.0
の2つのアセンブリを追加します。
TrustInstaller.cs内のRSA_PublicKeyの値を変更する必要があります。
そのためにMyPowerPointAddIn.dll.manifestを開き、<RSAKeyValuegt;から</RSAKeyValue>までをコピーします。
TrustInstaller.cs内のRSA_PublicKeyの値をコピーした値に置き換えます。
最後にビルドして、アドインプロジェクトの変更は終了です。
セットアッププロジェクトの新規作成
インストールしたいアドインプロジェクトと同じソリューションにセットアッププロジェクトを作成すると、インストーラの作成が正しく行われないことがあります。
念のため新規ソリューションでセットアッププロジェクトを作成します。MyPowerPointAddInSetupとしました。
レジストリの設定
レジストリエディタで
HKEY_CURRENT_USER\Software\Microsoft\Office\PowerPoint\AddIns\<プロジェクト名>
のキーを追加します。
Description,FriendlyNameという文字列値を追加し、アドイン名を指定します。
LoadBehaviorというDWORD値を追加し3を指定します。
Manifestという文字列値を追加し[TARGETDIR]<.vstoファイル名>|vstolocalを指定します。
今回のMyPowerPointAddInでは以下のように設定しました。
HKEY_CURRENT_USER\Software\Microsoft\Office\PowerPoint\AddIns\MyPowerPointAddIn Description : MyPowerPointAddIn FriendlyName : MyPowerPointAddIn LoadBehavior : 3 Manifest : [TARGETDIR]MyPowerPointAddIn.vsto|vstolocal
必須コンポーネントの追加
プロジェクトのプロパティダイアログから、[必須コンポーネント]を選択します。そしてVisual Studio Tools for The Office system 3.0 Runtimeにチェックを入れます。
カスタム動作の指定
カスタム動作エディタを開き、インストールの項目にMyPowerPointAddIn.dllを追加します。そしてCustomActionDataプロパティを以下のように指定します。
/deploymentManifestLocation="[TARGETDIR]<.vstoファイル名>"
確定、ロールバック、アンインストールの項目にもMyPowerPointAddIn.dllを追加します。CustomActionDataプロパティは空のままにしておきます。
無効なアプリケーションアドインからの復帰
作成しているアドイン内で例外が生じた場合や、デバッグ中にVisual Studio側からでバグを停止したりすると、アドインが無効にされてしまいます。
[1]How to: Re-enable a VSTO Add-in that has been disabled - Visual Studio | Microsoft Docs
詳しくは[1]に解決法が書いてあります。[1]によるとソフトな無効化とハードな無効化の2種類があるようですが、私はハードな無効化しかなったことがありません。以下はハードな無効化からの復帰方法の抜粋です。
1.アプリケーションの Microsoft Office ボタンをクリックします。 2.[<アプリケーション名> のオプション] をクリックします。 3.カテゴリ ペインの [アドイン] をクリックします。 4.詳細ペインの [無効なアプリケーション アドイン] ボックスの一覧からアドインを探します。 [名前] 列でアセンブリ名を指定し、[場所] 列でアプリケーション マニフェストの完全パスを指定します。 5.[管理] ボックスの [使用できないアイテム] をクリックし、[設定] をクリックします。 6.アドインを選択し、[有効にする] をクリックします。 7.[閉じる] をクリックします。
何もしない空のPowerPointアドインの作成
アドインの中身は後々追加するとして、とりあえず何もしないPowerPointアドインを作成します。
Visual Studioで新規プロジェクトを作成します。
PowerPoint2007アドインを選択します。
ここではC#で選択しますが、VB.NETでも同様だと思います。
アドイン名はMyPowerPointAddInにしました。適宜読み替えてください。
ThisAddIn.csというファイルが作成されます。このファイルをベースにアドインを作成していきますが、今回は何もしない空のアドインを作成するので、何も追加しません。
ビルドし、実行してみるとPowerPointが自動で起動します。特に見た目に変化は無いですが、アドインはちゃんとロードされています。
[Officeボタン]、[PowerPointのオプション]、[アドイン]の[アクティブなアプリケーションアドイン]の中にMyPowerPointAddInがあるのがわかります。
以上で何もしない空のアドインの作成は終了です。