C# Excelを遅延バインディングで操作する方法
いつもお世話になっております
只今C#でExcelファイルを出力するプログラムを作成しています。
以前やり方が分からずここに質問し、なんとかExcelに出力できるようになったのですが
Excelのバージョンが2007にしか対応していないことが分かり
遅延バインディング仕様に作り変えている最中です。
ところが、あと少しというところでクリアできない問題が2つ出てきたので、質問させていただきます。
1つは枠線を引く処理です。現在以下のように記述していますが
どうしても例外が発生してしまいます(0x800A03EC)
Type line = Type.GetTypeFromProgID("Excel.XlLineStyle.xlContinuous");
Type insidevertical = Type.GetTypeFromProgID("Excel.XlBordersIndex.xlInsideVertical");
Object tempA = objRange.GetType().InvokeMember("Borders", BindingFlags.GetProperty, null, objRange, null);
Object tempB = tempA.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, tempA, new object[] { insidevertical });
tempB.GetType().InvokeMember("LineStyle", BindingFlags.SetProperty, null, tempB, new object[] { line });
これがどう解決していいかわかりません・・・
遅延バインディングという手法も最近知ったばかりで、見よう見まねという状況です。
2つ目は、ファイル保存時の拡張子です。
現在は以下のように記述しています
(問題なく動作はしてくれます)
object[] mySave ={strFileName,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing};
objBook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, objBook, mySave);
以前はこのようにしていました
objBook.SaveAs(strFileName,
Excel.XlFileFormat.xlExcel8,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Excel.XlSaveAsAccessMode.xlNoChange,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing);
保存する拡張子をxlsに統一したいのですが、遅延にした場合のファイル形式の指定方法がわかりません
Type.Missingにすると、実行環境にあるものに合わせた拡張子で保存されてしまい
Excel2007を使用している環境ではxlsxのファイルを作ってしまいます。
Type exFormat = Type.GetTypeFromProgID("Excel.XlFileFormat.xlExcel8");
のような感じで使えるかとも思ったのですが、できませんでした。。
わかる方がいましたら、よろしくお願いします。
開発環境
Vista
VisualStudio2008
.NET Framework 3.5
お礼
Excel.Workbook oWBook; oWBook = (Excel.Workbook)(oApplication.Workbooks.Open( @"C:Bookwork.xlsm", // オープンするExcelファイル名 Type.Missing, // (省略可能)UpdateLinks (0 / 1 / 2 / 3) Type.Missing, // (省略可能)ReadOnly (True / False ) Type.Missing, // (省略可能)Format // 1:タブ / 2:カンマ (,) / 3:スペース / 4:セミコロン (;) // 5:なし / 6:引数 Delimiterで指定された文字 Type.Missing, // (省略可能)Password Type.Missing, // (省略可能)WriteResPassword Type.Missing, // (省略可能)IgnoreReadOnlyRecommended Type.Missing, // (省略可能)Origin Type.Missing, // (省略可能)Delimiter Type.Missing, // (省略可能)Editable Type.Missing, // (省略可能)Notify Type.Missing, // (省略可能)Converter Type.Missing, // (省略可能)AddToMru Type.Missing, // (省略可能)Local Type.Missing // (省略可能)CorruptLoad )); を追加したらできました! ありがとうございました^^