- PR -

セル指定し中に入ってるデータを抽出する方法。

投稿者投稿内容
オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-06-06 12:05
[quote]
その先輩の仰るとおり、「式ウォッチ」 などで Excel.Range オブジェクトの中身をご覧になればおわかりになるのではないかと思います。Excel.Range は、その名前どおりセルの Range であって、セルの中身そのものを表すわけではありません。
[/quote]

「式ウォッチ」で参照したところ、上記でも書いた[System.__Comobject]がでてきました。じゃんぬ氏と同じことをいいますがRangeの中を表してるんじゃなくRange自体を表してるんですよね。なので、それを表した上でさらに細かく何かをやると値をとれるってことですよね。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-06 12:16
引用:

オウドーさんの書き込み (2007-06-06 12:05) より:

「式ウォッチ」で参照したところ、上記でも書いた[System.__Comobject]がでてきました。じゃんぬ氏と同じことをいいますがRangeの中を表してるんじゃなくRange自体を表してるんですよね。なので、それを表した上でさらに細かく何かをやると値をとれるってことですよね。


やはり私とで認識の違いがあっただけのようですね。

変数の箱は Excel.Range として参照していますか? object ではメンバがわかるはずもないので、Excel.Range 型にキャストしなければなりません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-06-06 12:27

string Name = openFileDialog1.FileName;
string n = Path.GetFullPath(Name);
string nn = Path.GetFileName(n);


Excel.Application exapp = new Excel.Application();

Excel.Workbooks ks = exapp.Workbooks;
Excel.Workbook kd = ks.Open(n,Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);



Excel.Sheets ss = kd.Worksheets;

Excel.Worksheet st = (Excel.Worksheet)ss[1];
Excel.Range ge = st.Cells;
Excel.Range GEGE;
GEGE = ge.get_Range("A11", Type.Missing);
textBox1.Text = GEGE.Value2.ToString();

ks.Close();
exapp.Quit();

try~catchは抜きでこのようなコードを書いてみました。

[quote]
じゃんぬねっとさんの書き込み (2007-06-06 12:16) より:

変数の箱は Excel.Range として参照していますか? object ではメンバがわかるはずもないので、Excel.Range 型にキャストしなければなりません。


[/quote]
本当に、ありがとうございます。
認識が違いますね。変数が型対応してないからobject型をExcel.Range型の変数にしろってことですね。


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-06 12:33
引用:

オウドーさんの書き込み (2007-06-06 12:27) より:

textBox1.Text = GEGE.Value2.ToString();


あら、できているじゃないですか。ついでに Value プロパティと Value2 プロパティの違いについても調べておくと良いと思います。

引用:

本当に、ありがとうございます。認識が違いますね。変数が型対応してないからobject型をExcel.Range型の変数にしろってことですね。


.NET CLR 言語の多くは型を強く意識した言語が多いです。特に C# は厳密な類に入ると思います。今回に限らず型を厳密に指定した変数の箱を使うことをお勧めします。ポリモーフィズムなどの概念は確かに大切ですが、無闇に使うべきものではないと考えます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-06-06 12:39
引用:

じゃんぬねっとさんの書き込み (2007-06-06 12:33) より:
引用:

オウドーさんの書き込み (2007-06-06 12:27) より:

textBox1.Text = GEGE.Value2.ToString();


あら、できているじゃないですか。ついでに Value プロパティと Value2 プロパティの違いについても調べておくと良いと思います。

引用:

本当に、ありがとうございます。認識が違いますね。変数が型対応してないからobject型をExcel.Range型の変数にしろってことですね。


.NET CLR 言語の多くは型を強く意識した言語が多いです。特に C# は厳密な類に入ると思います。今回に限らず型を厳密に指定した変数の箱を使うことをお勧めします。ポリモーフィズムなどの概念は確かに大切ですが、無闇に使うべきものではないと考えます。





出来ているとのことですがコンパイルが通らないんですよね。

「オブジェクト参照がオブジェクト インスタンスに設定されていません。」

オブジェクトnullじゃないですし、、、データを抽出のにこんな手間がかかるとは。
オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-06-06 12:57
余談ですがデータを抽出じゃなくDBからエクセルにデータを挿入するサンプルが多くみられたような気がします。エクセルからインポートするサンプルは私が調べた限りではありませんでした。探す能力、もしくは、C#の理解力が乏しいだけかもしれませんが。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-06 13:09
引用:

オウドーさんの書き込み (2007-06-06 12:39) より:

出来ているとのことですがコンパイルが通らないんですよね。
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
オブジェクトnullじゃないですし、、、データを抽出のにこんな手間がかかるとは。


メッセージからすると、NullReferenceException が発生しているようですが、本当にコンパイル (ビルド) 時の出来事でしょうか? 'どこで' 発生していますか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-06-06 13:59
引用:

じゃんぬねっとさんの書き込み (2007-06-06 13:09) より:
引用:

オウドーさんの書き込み (2007-06-06 12:39) より:

出来ているとのことですがコンパイルが通らないんですよね。
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
オブジェクトnullじゃないですし、、、データを抽出のにこんな手間がかかるとは。


メッセージからすると、NullReferenceException が発生しているようですが、本当にコンパイル (ビルド) 時の出来事でしょうか? 'どこで' 発生していますか?





申し訳ありません。デバックも通りましたがやはりまだ値は出力されませんね。
System.Object[,]に変わりましたが。ああ、なんでだろう。。。

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