- - PR -
レイトバインドによるExcel操作
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-20 10:41
質問させて下さい。
データ入力集計ソフトを作成しまして、それらをExcel出力するのですが ある壁にぶつかりました。 私の会社でのExcelのバージョンが統一されておらず COMオブジェクトを使用しての作成は諦め、レイトバインドで コードを書き直すことにしました。 しかし、C#でのレイトバインドコードは私にはとても難しく 調べている間に、VBでクラスライブラリを作成しそれを用いてExcel操作 するのがよい方法だと知り早速、作成しているのですが ・ファイルオープン・セルの参照等 基本的な事さえ解りません; HPを参照しても、皆それぞれ同じレイトバインドでも操作方法が違ったりと どこかExcel操作のお勧めサイト等あれば、教えて頂けないでしょうか。 | ||||||||||||
|
投稿日時: 2006-12-20 11:40
「遅延バインディング」 かどうかは、COM ラッパ オブジェクトを使用有無とは全く関係がないと思います。 遅延バインディングでも、Office PIA を利用していれば、COM ラッパ オブジェクトを使用します。
"VB になるとわからない" という範囲ではないと思います。(構文レベルのお話ではないですから) とりあえず、実行環境では、型を明示化してソースを組んだ方が良いでしょう。 インテリセンスが使えますし、各メンバを参照しやすいです。 (あとで、遅延バインディングに変えるとしても、手間はかかりません) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-12-20 11:56
回答ありがとうございます。
>とりあえず、実行環境では、型を明示化してソースを組んだ方が良いでしょう。 >インテリセンスが使えますし、各メンバを参照しやすいです。 >(あとで、遅延バインディングに変えるとしても、手間はかかりません) 私が困ってるのが、まさにここで素人プログラマなのでインテリセンスが無いと ほぼ何も出来ません。。 MSのサイトからのソースを流用して作成しているのですが、 Dim objApp As Object Dim objBook As Object Dim objBooks As Object Dim objSheets As Object Dim objSheet As Object Dim range As Object ' Instantiate Excel and start a new workbook. objApp = CreateObject("Excel.Application") objBooks = objApp.Workbooks objBook = objBooks.Add objSheets = objBook.Worksheets objSheet = objSheets.Item(1) range = objSheet.Range("A1") 'Set the range value. range.Value = "Hello, World!" 'Return control of Excel to the user. objApp.Visible = True objApp.UserControl = True COMオブジェクトの参照設定をしていないからでしょうか インテリセンスが使えません; どうすればインテリセンスが使えるようになるのでしょうか? 素人質問で申し訳ないです。 | ||||||||||||
|
投稿日時: 2006-12-20 12:00
先にも書いたように "型を明示化" すれば良いです。 明示化するためには、seg さんがすでにご理解しているとおり、 参照設定に Office PIA 用の COM を一時的にでも加える必要があります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-12-20 12:02
Excel のヘルプを参照してください。 Excel オートメーションは、基本的に Excel VBA のオブジェクトモデルを公開したものです。
仕方ありません。 ある目的を達成するのにいくつかの通り道があるのは当たり前の話ですし、同じ操作をするにしても Excel のバージョンによってメソッド引数などが異なったりします。
特定の操作の事例が必要なら、VBA 関係のサイトを探した方が早そうです。 あと、Excel の操作をマクロに記録して、自動生成された VBA のソースを読んで Excel オートメーションの手順を考える、というのを個人的にはよくやります。 | ||||||||||||
|
投稿日時: 2006-12-20 13:49
>参照設定に Office PIA 用の COM を一時的にでも加える必要があります。
そうすることによって、インテリセンスは使えるようにはなりますが メソッドが違うみたいです、例えばRangeを参照する際だと COM:xlSheets.get_Range(xlSheets.Cells[1, 1],xlSheets.Cells[1, 1]) MSレイトバインド:objSheet.Range("A1") となるみたいです。 やはりMSサイトに書かれている通りインテリセンス無しで、何度も動作確認を しながら作成するしかないのでしょうか。 >あと、Excel の操作をマクロに記録して、自動生成された VBA のソースを読んで Excel オ >ートメーションの手順を考える、というのを個人的にはよくやります。 C#でCOMオブジェクトを参照している時は、仰るとおりVBAソースから流用出来たのですが >Excel オートメーションは、基本的に Excel VBA のオブジェクトモデルを公開したものです。 ということは、まさにExcelVBAなのかな、試してみます。 じゃんぬねっとさん 渋木宏明(ひどり)さん 回答ありがとうございました。もう少し勉強してみます。 (引用の仕方が解らず可読性に欠けますがご了承下さい;) | ||||||||||||
|
投稿日時: 2006-12-20 13:59
そうはならないと思いますが... 参照に加えた Microsoft Excel Object Library のバージョンはいくつでしょうか?
'Sheets' が複数形になっているのが、気になります。 Excel.Worksheet 型と、Excel.Worksheets 型は別物なのですから、比較する意味がありません。 # 再度申し上げますが、遅延バインディングを使用することと、 # COM ラッパーオブジェクトを使用することは、全く関係ありません。 # 「遅延バインディング」 の意味合いを、正確に理解しましょう。 最初の投稿に戻りますが、
こういうことであれば、Excel VBA マクロもしくは、VBScript に実装して、 C# からそれを呼び出す方が、COM を意識する必要が少なくなり安全です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-12-20 14:30
Excel2003の11.0になります。
sheetsの複数形は誤記です、申し訳ありません。 再度、MSのHPを参照しましたがどうやら私が勘違いをしていたようですね Excelバージョンが違う⇒遅延バインディングなら大丈夫と安易に考えてました; 実際にエラーが起きたのはExcel2000で、恐らくOpenメソッドの引数の数違いで 例外がスローされたのだと思います。 値の参照・設定 セルの結合等 簡単な処理しかしていないので 例外を見直して、修正するのが早いかもしれませんね。 古いバージョンのExcelオブジェクトライブラリを使うには、Excelをバージョンダウン するしかないのでしょうか?
*.bas を読込んでExcel上で実行させる事が可能なのですか!? すごい事が出来るんですね; |