none
Visual Basic 6.0でのExcel.ChartのSelectイベント処理を.NET C#で実現する方法についての質問 RRS feed

  • 質問

  • 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.0
    private WithEvents objChart As Excel.Chart
    Private 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)
    {
    ...
    }
    そもそも上記の方法であっているのかという疑問もあります。
    以上、よろしくお願いいたします。

    2018年11月21日 5:22

回答

  • Chartオブジェクトを、Microsoft.Office.Interop.Excel.ChartEvents_Eventインターフェイスにキャストしてやれば、Selectイベントを使用できるかと思います。

    イベント系のインターフェイスがインテリセンスの表示を抑制されてるっぽいですが。

    // でも.NETからOfficeをいじるのはまだしもイベントまで踏み込むとなると後片付けとか面倒そう。

    • 回答としてマーク eshima 2018年11月22日 8:22
    • 回答としてマークされていない eshima 2018年11月22日 8:22
    • 回答としてマーク eshima 2018年12月9日 7:06
    2018年11月21日 6:22

すべての返信

  • Chartオブジェクトを、Microsoft.Office.Interop.Excel.ChartEvents_Eventインターフェイスにキャストしてやれば、Selectイベントを使用できるかと思います。

    イベント系のインターフェイスがインテリセンスの表示を抑制されてるっぽいですが。

    // でも.NETからOfficeをいじるのはまだしもイベントまで踏み込むとなると後片付けとか面倒そう。

    • 回答としてマーク eshima 2018年11月22日 8:22
    • 回答としてマークされていない eshima 2018年11月22日 8:22
    • 回答としてマーク eshima 2018年12月9日 7:06
    2018年11月21日 6:22
  • 早速のご回答ありがとうございます。

    ご回答の内容の通り試してみました。

    たしかにキャストすればSelectが使えますね。

    インテリセンスの表示が抑制せれてるんですか。

    イベントハンドラも呼ばれましたし、とりあえず

    やりたいことが出来そうです。

    本当にありがとうございました。

    2018年11月22日 8:05