遅延バインディング

.Net(C#)アプリからExcelのVBAを呼び出したい(遅延バインディング)

http://jehupc.exblog.jp/13711436/

 

public ExeMacro()
{

//Excelマクロファイルパス
string strMacroPath = @”D:test.xls”;

// Excel操作用COMオブジェクトを生成する
//ApplicationClass oExcel = new ApplicationClass();
object oExcel = CreateObject(“Excel.Application”);

//ワークブックコレクションオブジェクトを生成する。
//Workbooks oBooks = oExcel.Workbooks;
object oBooks = oExcel.GetType().InvokeMember(“Workbooks”, BindingFlags.GetProperty, null, oExcel, null);

//Excelファイルのオープン
//Workbook oBook = oBooks.Open(strMacroPath);
object oBook = oBooks.GetType().InvokeMember(
“Open”, BindingFlags.InvokeMethod, null,
oBooks, new object[] {
strMacroPath
, Type.Missing
, Type.Missing
, Type.Missing
, Type.Missing
, Type.Missing
, Type.Missing
, Type.Missing
, Type.Missing
, Type.Missing
, Type.Missing
, Type.Missing
, Type.Missing
});

// Excelファイルの表示
//oExcel.Visible = true;
oExcel.GetType().InvokeMember(“Visible”, BindingFlags.SetProperty, null, oExcel, new object[] { true });

//マクロ実行(Testというサブプロシージャを実行する)
//oExcel.Run(“Test”);
oExcel.GetType().InvokeMember(“Run”, BindingFlags.InvokeMethod, null, oExcel, new object[] { “Test” });

//閉じる
//oBook.Close(false);
oExcel.GetType().InvokeMember(“Quit”, System.Reflection.BindingFlags.InvokeMethod, null, oExcel, null);
//COM解放
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oBook);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oBooks);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oExcel);
oBook = null;
oBooks = null;
oExcel = null;
}

/// <summary>
/// COMオブジェクトへの参照を作成および取得します
/// </summary>
/// <param name=”progId”>作成するオブジェクトのプログラムID</param>
/// <param name=”serverName”>
/// オブジェクトが作成されるネットワークサーバー名
/// </param>
/// <returns>作成されたCOMオブジェクト</returns>
public static object CreateObject(string progId, string serverName)
{
Type t;
if (serverName == null || serverName.Length == 0)
t = Type.GetTypeFromProgID(progId);
else
t = Type.GetTypeFromProgID(progId, serverName, true);
return Activator.CreateInstance(t);
}

/// <summary>
/// COMオブジェクトへの参照を作成および取得します
/// </summary>
/// <param name=”progId”>作成するオブジェクトのプログラムID</param>
/// <returns>作成されたCOMオブジェクト</returns>
public static object CreateObject(string progId)
{
return CreateObject(progId, null);
}

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です