DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VC++.netのエクセルの値取得

環境/言語:[WindowsXP、VC++.net、NET Framework4.0]
分類:[.NET]

お世話になります。

VC++.netでのエクセルの値取得について教えて下さい。
Microsoft::Office::Interopを使用して、エクセル操作を作成しました。

今セルの値をtextで取得しているのですが、値は西暦で入っていて、表示
が和暦になっているセルは、和暦で取得されてしまいました。
これを西暦で取得したいと思いValueを使用できないかと思うのですが
引数0はだめといったビルドエラーになってしまいます。

WEBを検索するとVBは見つかるのですが、VC++のにはたどり着けませんでした。
識者の方セルの値を取得する方法を教えていただけないでしょうか?

using namespace Microsoft::Office::Interop;

〜省略〜 
Excel::Workbook^ oBook;
 Excel::Worksheet^ oSheet;
 Excel::Range^ rng;

rng = (Excel::Range^)oSheet->Cells[6, 1];
 StrInstitution = rng->Text->ToString();

上記 rng->Value->ToString();ではだめでした。。

よろしくお願い致します。
■No28121に返信(Mr.Pooさんの記事)
> WEBを検索するとVBは見つかるのですが、VC++のにはたどり着けませんでした。
> 識者の方セルの値を取得する方法を教えていただけないでしょうか?

利用しているライブラリが変わっているわけではないので、
VB でも C# でも J# でもなんでも使うものは同じですが...

> これを西暦で取得したいと思いValueを使用できないかと思うのですが
> 引数0はだめといったビルドエラーになってしまいます。
> 上記 rng->Value->ToString();ではだめでした。。

はい、Value プロパティで良いです。
VB ちゃんと違い引数に RangeValueDataType を指定しなければなりません。
引数は Missing.Value で良いでしょう。

日付書式もしくは通貨書式のセルでなければ、Value2 プロパティでも良いですが (こちらは引数なし)。
レスありがとうございます。

■No28123に返信(じゃんぬねっとさんの記事)
> はい、Value プロパティで良いです。
> VB ちゃんと違い引数に RangeValueDataType を指定しなければなりません。
> 引数は Missing.Value で良いでしょう。

rng->Value(Type::Missing);
rng->Value(Excel::XlRangeValueDataType::xlRangeValueDefault);
をしたのですが、やはり「関数に 0 個の引数を指定できません。」で怒られます。

他に指定の仕方があるのでしょうか?

> 日付書式もしくは通貨書式のセルでなければ、Value2 プロパティでも良いですが (こちらは引数なし)。
Convert::ToString(rng->Value2);でできました。
ただ日付が数値(シリアル値?)になってしまいました。

よろしくお願いいたします。
■No28125に返信(Mr.Pooさんの記事)
> やはり「関数に 0 個の引数を指定できません。」で怒られます。

あぉぅ! ちゃんと読んでいませんでした。申し訳ないです。

> 他に指定の仕方があるのでしょうか?

上記のビルドエラーが出る場合は、メソッドからアクセスしてください。
今回の場合だと get_Value メソッドになると思います (たぶん)。

しっかり読んでもいないのに回答をしてしまって申し訳ないです。orz
■No28128に返信(じゃんぬねっとさんの記事)
> 上記のビルドエラーが出る場合は、メソッドからアクセスしてください。
> 今回の場合だと get_Value メソッドになると思います (たぶん)。

rng->get_Value(Type::Missing);
「'Microsoft::Office::Interop::Excel::Range' のメンバーではありません。」
でだめでした。
valueは使用できないのでしょうか。。

> しっかり読んでもいないのに回答をしてしまって申し訳ないです。orz

いえいえ、一歩進んだので助かります。
■No28129に返信(Mr.Pooさんの記事)
> rng->get_Value(Type::Missing);
> 「'Microsoft::Office::Interop::Excel::Range' のメンバーではありません。」
> でだめでした。
> valueは使用できないのでしょうか。。

rng->Value[System::Type::Missing];

これでどうでしょうか?
■No28132に返信(じゃんぬねっとさんの記事)
> rng->Value[System::Type::Missing];
>
> これでどうでしょうか?

値を取得できました。
ありがとうございました。助かりました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板