□投稿者/ 魔界の仮面弁士 (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)へのキャストが必要になります。
|
|