Excel VSTOアドイン開発入門
はじめに
Spreadsheets/Excel Advent Calendar 2018の12日目の記事です。
Excelでの作業の自動化といえばExcel VBAですが、複雑な機能の実装には辛いことも多かったりします。 そんなときは、C#や.NET Frameworkの機能がフルに使えるVSTO (Visual Studio Tools for Office)が便利です。
そこで本記事では、ExcelのVSTOアドインの開発環境構築から配布までを解説したいと思います。
想定環境
- Windows 10
- Visual Studio Community 2017
- Office Developer Tools for Visual Studio 2017
- Excel 2016
- .NET Framework 4.6.1
やってみる
1. 環境構築
VSTOアドインの開発には、Visual Studio の他に Office Developer Tools という拡張機能が必要です。 それぞれ下記リンクからダウンロードし、インストーラに従ってインストールします。
2. プロジェクト作成
Visual Studioを起動し、[ファイル]-[新規作成]-[プロジェクト]からプロジェクトを作成します。 [Visual C#]-[Office/SharePoint]-[VSTOアドイン]から、「Excel 2013と2016 VSTOアドイン」を選択し、[OK]をクリックします。
すると、以下のようなコードが生成されます。
// ThisAddin.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; using Excel = Microsoft.Office.Interop.Excel; using Office = Microsoft.Office.Core; using Microsoft.Office.Tools.Excel; namespace ExcelAddIn1 { public partial class ThisAddIn { private void ThisAddIn_Startup(object sender, System.EventArgs e) { } private void ThisAddIn_Shutdown(object sender, System.EventArgs e) { } #region VSTO で生成されたコード // (省略...) } }
ThisAddIn_Startup()
と ThisAddIn_Shutdown()
は、それぞれアドインのロード時、アンロード時に実行されるイベントハンドラです。
参考: Office プロジェクト内のイベント - Visual Studio | Microsoft Docs
ここでは一旦なにもせず置いておきます。
3. リボンにボタンを追加
アドインの機能を実行するため、リボンにボタンを追加していきます。
まず、ソリューション エクスプローラー からプロジェクト名(ここでは ExcelAddIn1
)を右クリックし、[追加]-[新しい項目]を選択します。
次に、[Visual C# アイテム]-[Office/SharePoint]から「リボン(ビジュアルなデザイナー)」を選択して[追加]します。
これで見慣れたフォームデザイナが起動するので、左側のツールボックスからボタンを選択し、ドラッグ&ドロップでリボンに追加しましょう。
ボタンをダブルクリックすると、クリック時のイベントハンドラ button1_Click()
が挿入されるので、ここに処理を書いていきます。
// Ribbon1.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Office.Tools.Ribbon; namespace ExcelAddIn1 { public partial class Ribbon1 { private void Ribbon1_Load(object sender, RibbonUIEventArgs e) { } private void button1_Click(object sender, RibbonControlEventArgs e) { // ここにいろいろ書く } } }
4. アドインの処理を書く
VSTOプロジェクト内では、アドイン自体の機能やExcelのワークシート等にアクセス可能な Globals
というクラスがあります。
シートの内容の読み書きといったExcelとのやりとりは、主にこのクラスを介して行います。
参考: Office プロジェクト内のオブジェクトへのグローバル アクセス - Visual Studio | Microsoft Docs
試しに、前述の button1_Click()
を下記のように変更してみます。
private void button1_Click(object sender, RibbonControlEventArgs e) { // アクティブなシートの取得 // ActiveSheetはdynamic型であり、そのままだとインテリセンスが効かないので、 // キャストするために as Microsoft.Office.Interop.Excel.Worksheet をつけている。 var activeSheet = Globals.ThisAddIn.Application.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet; // セルに値を設定 activeSheet.Range["A1"].Cells.Value = "Hello"; activeSheet.Cells[1, 2] = 123; }
4. 実行してみる
上部メニューから[開始]をクリックすると、Excelが起動します。 「空白のブック」を選択してリボンの「アドイン」タブを開くと、3.で追加したボタンが表示されます。
これをクリックすると 4. で記載した処理が実行され、セルに値が設定されます。
なお、このままの状態では、Excel起動時に毎回このアドインが読み込まれることになります。 このため、作業が終わったらVisual Studioの上部メニューから [ビルド]-[ソリューションのクリーン] を実行し、開発中のアドインを削除しましょう。
5. アドインの配布
配布にはいくつか方法がありますが、最も手軽な「インストーラを含むフォルダをそのまま配布」の方法を紹介します。
Visual Studioの上部メニューの [ビルド]-[(プロジェクト名)の発行] をクリック → 発行する場所のパスを設定(今回はデフォルトの「公開」フォルダ)して[次へ]をクリック → 「CD-ROM または DVD-ROM から」を選択して [完了] をクリックします。
今回は発行する場所のパスがデフォルトのままなので、プロジェクトフォルダ配下に「公開」フォルダが作成され、そこにインストーラが一式保存されます。
別のPCでアドインをインストールするには、前述の「公開」フォルダをまるごとコピーし、中の setup.exe
を実行すればOKです。
アンインストールは、一般的なソフトと同じく「アプリと機能」から行います。
なお、上記手順で発行を行うと、デフォルトでは自動的にリビジョンが上がっていきます。 バージョンを明示的に設定したい場合は、Visual Studioの上部メニュー [プロジェクト]-[(プロジェクト名)のプロパティ] を開き、 [発行] から「発行するバージョン」を編集してください。 「リリースごとにリビジョンを自動的に追加する」のチェックをはずすと、リビジョンが自動的に上がらなくなります。
参考: 発行ウィザード (Visual Studio での Office 開発) - Visual Studio | Microsoft Docs
6. 参考リソース
VBAとVSTOの比較
公式チュートリアル
リファレンス
まとめ
ExcelのVSTOアドインの開発環境構築から配布までの一連の流れを解説しました。 VBAでは厳しいと感じる場面では、ぜひ試してみてください。
明日は __papix__さん です。