- PR -

遅延バインディングでExcelに配列でデータを渡す方法

1
投稿者投稿内容
仕事向いてないかも
会議室デビュー日: 2005/11/18
投稿数: 1
投稿日時: 2005-11-18 20:41
お世話になります。初心者ですみません。

事前バインディングでExcelシートに2次元配列でデータを
直接セットし、表示させていましたが、わけあって
遅延バインディングで同様の処理を行う事になりました。

セル毎にデータをセットする方法はわかったのですが、
配列で一括で渡す方法がわかりませんでした。

ご存知の方がおられましたら、ご教授いただけると大変助かります。
よろしくお願いいたします。


//事前バインディングの場合 これはうまくいくのですが------------------------

protected override void WriteWorkSheet(string[,] strData, Excel.Worksheet sheet)
(中略)
string strCell1 = "B5";
string strCell2 = "E10";
sheet.get_Range(strCell1,strCell2).value2 = strData;


//遅延バインディングの場合 こちらがわかりません(最後のInvokeMemberの部分)--

// Excelのクラスのタイプとインスタンスを取得する
Type typClassType = Type.GetTypeFromProgID("Excel.Application");
object objExcelApp = Activator.CreateInstance(typClassType);

//workbooks のコレクションを取得する
object objExcelBooks = objExcelApp.GetType().InvokeMember( "Workbooks",
BindingFlags.GetProperty, null, objExcelApp, null );

//新たにworkbookを作成する
object objExcelBook = objExcelBooks.GetType().InvokeMember( "Add",
BindingFlags.InvokeMethod, null, objExcelBooks, null );

//worksheets のコレクションを作成する
object objExcelSheets = objExcelBook.GetType().InvokeMember( "Worksheets",
BindingFlags.GetProperty, null, objExcelBook, null );

//最初の worksheet を取得する
object[] args = new Object[1];
args[0] = 1;
object objExcelSheet = objExcelSheets.GetType().InvokeMember( "Item",
BindingFlags.GetProperty, null, objExcelSheets, args );

//セットするRangeを設定する
args = new Object[2];
args[0] = "A1";
args[1] = "B2";
object objExcelRange = objExcelSheet.GetType().InvokeMember( "Range",
BindingFlags.GetProperty, null, objExcelSheet, args );

//データをシートにセットする ここを2次元配列のデータでセットしたい
args = new Object[1];
args[0] = "Hello, World!";

objExcelRange.GetType().InvokeMember( "Value",
BindingFlags.SetProperty, null, objExcelRange, args );
1

スキルアップ/キャリアアップ(JOB@IT)