C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 16 を表示中)
■6098 / )  マルチレス
□投稿者/ 魔界の仮面弁士 (367回)-(2007/08/01(Wed) 02:24:59)
2007/08/01(Wed) 03:40:01 編集(投稿者)

No6009 (HiJun さん)
> oSheet.Cells[1, 1]の値は、Cellオブジェクトですので...
Cell オブジェクトではなく、Range オブジェクトではないかと。


No6019 (C#初心者 さん)
> Microsoft.Excel 11.0 Object Library を参照しています。
> こういった現象は私のパソコンだけなのでしょうか?
> Microsoft.Excel 12.0 Object Library だと正常に動きます。
実行環境の Excel バージョンと、開発環境の Excel バージョンを一致させてください。
Excel バージョンが異なると、正常に動作しない可能性が高いです。

たとえば、Workbooks の Open メソッドの引数の数は、Excel のバージョンによって異なります。
そのほか、古いバージョンでは戻り値が無い(void)メソッドだったのに、あるバージョンからは
オブジェクトを返すようになっていたり、新たなメソッドが追加されていたりするなど、
COM インターフェイスの差異が無視できないため、バージョン混在は基本的にできません。


No6056 (mあ さん)
> oSheet.Rows(1).Cells(1) とか、書けないのだろうか??
VBA なら書けますが、C# では書けません。

C# ではレイトバインドが使えないので、(他の方が書かれているように)キャストが必要です。

> Cells[]って古い書き方なんじゃ?
C# では引数付きプロパティがサポートされておらず、インデクサによって処理されるため、
言語仕様上、Cells[ ] での表現となります。別に古い書き方というわけではありません。


No6096 (mあ さん)
> C# じゃなくてすんまそんですが・・・
申し訳ないですが、質問者の方が混乱してしまいますので、VB6/VBA 系の情報は
引っ込めて、C# に限定した話でお願いできますでしょうか。>mあ さん


> 確かに多いけど、1つ目以外は省略可能ですけど・・・
VBA ならそうなのですが、C# ではそうではありません。

C# は、省略可能な引数をサポートしていないため、Optional 引数の部分には
すべて Missing を指定しなければならないのです。


No6025 (C#初心者 さん)
> PIAがインストールできていなかったようです。
PIA を使うか、(自動生成される)IA を使うかで、微妙にコードが異なってきますので、
サンプル等を真似る際には注意が必要ですね。

> oXL = new Excel.Application();
間違いではありませんが、この場合は
 oXL = new Excel.ApplicationClass();
の方が適切かと思います。(本題とは関係ありませんが)


> oSheet.Cells[1, 1].Value = "test";
> 再下行でValueがエラーになります。
C# で書く場合には、
 Excel.Range oCells = oSheet.Cells;
 Excel.Range oRange = (Excel.Range)oCells[1, 1];
 oRange.Value = "test";
または、
 Excel.Range oCells = oSheet.Cells;
 Excel.Range oRange = (Excel.Range)oCells[1, 1];
 oRange.set_Value(Type.Missing, "test");
となります。

いずれの構文になるのかは、Excel のバージョンによって異なります。
Excel 2000 以下であれば前者、Excel 2002 以上であれば後者です。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=7041&KLOG=6

# ただし、PIA を使っている場合は前者の表現となることもあります。


いずれにせよ、oCells[1, 1] の戻り値は object 型であるため、C# においては
Value プロパティを直接呼び出すことができません。(VB ならば呼べるのですが)
C# では、Excel.Range 型(または、Excel.IRange)へのキャストが必要になります。
返信 編集キー/


管理者用

- Child Tree -