トップ回答者
Visual Basic 6.0でのExcel.ChartのSelectイベント処理を.NET C#で実現する方法についての質問

質問
-
Visual Basic 6.0でのExcel.ChartのSelectイベント処理を.NET C#で実現する方法についての質問Microsoft.Office.Interop.Excelを使用してChartのSelectイベントを処理したいと思っています。Microsoft.Office.Interop.Excel.ApplicationでExcelを起動したあと、Application.Workbooks.Open()でExcelファイルを開きます。そしてWorkbook中のChartに対してSelectイベントの処理を行いたいのですが、Microsoft.Office.Interop.Excel.ChartにはSelectイベントが存在しません。そこでMicrosoft.Office.Tools.Excel.Chartを使用したいと思いますが、Microsoft.Office.Interop.Excel.WorkbookからMicrosoft.Office.Tools.Excel.Workbookを得るためにMicrosoft.Office.Tools.Excel.Factory.GetVstoObjectを使いたいのですがその方法が分かりません。実現方法またはVB6.0のSelectイベント処理と同様の実現方法をご教授お願いいたします。前提条件・Visual Studio Professional 2015
・C# WPFアプリケーション
※Officeアプリ、アドインとしては考えておりません。VB6.0private WithEvents objChart As Excel.ChartPrivate Sub objChart_Select(ByVal ElementID As Excel.XlChartItem, ByVal Arg1 As Long, ByVal Arg2 As Long)
...↓ VB6.0の方法を.NET C#で行う方法.NET C#
Microsoft.Office.Interop.Excel.Application xlsApp;
Microsoft.Office.Interop.Excel.Workbook xlsBook;
Microsoft.Office.Interop.Excel.Chart xlsChart;
xlsApp = new Microsoft.Office.Interop.Excel.Application();
xlsBook = xlsApp.Workbooks.Open("既存のExcelファイル.xlsx");
xlsChart = xlsBook.Charts[1]// xlsChart.SelectEvent += ObjChart_SelectEvent;は出来ないMicrosoft.Office.Tools.Excel.Workbook objBook
Microsoft.Office.Tools.Excel.Chart objChart;// GetVstoObjectでホスト項目取得
objBook = ….Factory.GetVstoObject(xlsBook);
objChart = objBook.Charts[1];objChart.SelectEvent += ObjChart_SelectEvent;private void ObjChart_SelectEvent(int ElementID, int Arg1, int Arg2)
{
...
}そもそも上記の方法であっているのかという疑問もあります。以上、よろしくお願いいたします。
回答
-
Chartオブジェクトを、Microsoft.Office.Interop.Excel.ChartEvents_Eventインターフェイスにキャストしてやれば、Selectイベントを使用できるかと思います。
イベント系のインターフェイスがインテリセンスの表示を抑制されてるっぽいですが。
// でも.NETからOfficeをいじるのはまだしもイベントまで踏み込むとなると後片付けとか面倒そう。
すべての返信
-
Chartオブジェクトを、Microsoft.Office.Interop.Excel.ChartEvents_Eventインターフェイスにキャストしてやれば、Selectイベントを使用できるかと思います。
イベント系のインターフェイスがインテリセンスの表示を抑制されてるっぽいですが。
// でも.NETからOfficeをいじるのはまだしもイベントまで踏み込むとなると後片付けとか面倒そう。