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

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

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

Re[4]: 添え字が1から始まる配列を内包したObjectの扱い方


(過去ログ 67 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■38790 / inTopicNo.1)  添え字が1から始まる配列を内包したObjectの扱い方
  
□投稿者/ C#恐怖症 (1回)-(2009/07/25(Sat) 00:15:59)

分類:[.NET 全般] 

C#恐怖症と申します。いつもお世話になっています。

掲題の件ですが、現在VS2008(C#)にて遅延バインドを使用してExcel操作を行っておりますが
その過程で調べての解決する糸口が掴めなかったものがありましたので、質問させて下さい。

具体的に説明いたしますと、Excel.WorkbookのColorsプロパティ(現在のパレットの色を配列で返す)を取得した場合、
COMでの戻り値はVARIANTであるため、C#ではObjectで受け取ります。
そして、受け取ったObjectをビジュアライザで見てみると、Object[1..56]という風に書かれており、
内容を確認すると、添え字が1から始まる配列になっておりました。

そこで質問なのですが、添え字が0から始まるものであれば、キャストが可能な為、
一度キャストするなどして添え字で配列の各値を取得できるのですが、
添え字が1から始まる為、キャストする事すらままならず、
また object[] でなくただの object の為、添え字を使用してのアクセスも出来ません。

実際問題として、Excel.WorkbookのColorsプロパティにはIndexを指定しての取得も出来るので
このプロパティに関しては問題の回避方法があると考えておりますが、
基本的にExcel操作を考えた場合、VARIANTでの戻り値(配列)は添え字が1から始まるのがほとんどですので、
いずれこの問題を解決する必要があると考えています。

問題解決の糸口になるような情報などありましたらご教授願います。
引用返信 編集キー/
■38794 / inTopicNo.2)  Re[1]: 添え字が1から始まる配列を内包したObjectの扱い方
□投稿者/ 囚人 (401回)-(2009/07/25(Sat) 02:34:06)
状況がいまいち掴めていませんが、

>そこで質問なのですが、添え字が0から始まるものであれば、キャストが可能な為、
>一度キャストするなどして添え字で配列の各値を取得できるのですが、
>添え字が1から始まる為、キャストする事すらままならず、

の前者と後者の違いってどういう意味ですか?

単に object の配列が object として返ってきてるだけだから、
object o = // Excel から返ってきた何か
object[] os = (object[])o;
とすれば良いって話じゃなくてですか?

引用返信 編集キー/
■38796 / inTopicNo.3)  Re[2]: 添え字が1から始まる配列を内包したObjectの扱い方
□投稿者/ C#恐怖症 (2回)-(2009/07/25(Sat) 08:38:36)
No38794 (囚人 さん) に返信
> 単に object の配列が object として返ってきてるだけだから、
> object o = // Excel から返ってきた何か
> object[] os = (object[])o;
> とすれば良いって話じゃなくてですか?

それがよろしくないので困っております。
キャスト出来るのはあくまでも添え字が0から始まる場合であり、
COMなどで戻ってくる添え字1から始まる配列ではキャスト時に
System.InvalidCastException の例外が発生します。

これは下記URLの下段のトラブルシューティングにも記載されております。
http://support.microsoft.com/kb/317030/ja
引用返信 編集キー/
■38797 / inTopicNo.4)  Re[3]: 添え字が1から始まる配列を内包したObjectの扱い方
□投稿者/ やじゅ (1134回)-(2009/07/25(Sat) 09:27:25)
やじゅ さんの Web サイト
No38796 (C#恐怖症 さん) に返信

対象方法で検索して見つけたのは、ここくらい。ヒントにでもなれば・・・

Visual Basic .NET では配列の下限が常に 0 になる
http://naruokashiki.blog38.fc2.com/blog-entry-196.html
引用返信 編集キー/
■38802 / inTopicNo.5)  Re[4]: 添え字が1から始まる配列を内包したObjectの扱い方
□投稿者/ C#恐怖症 (3回)-(2009/07/25(Sat) 10:46:53)
2009/07/25(Sat) 10:47:48 編集(投稿者)
2009/07/25(Sat) 10:47:38 編集(投稿者)

No38797 (やじゅ さん) に返信
> ■No38796 (C#恐怖症 さん) に返信
>
> 対象方法で検索して見つけたのは、ここくらい。ヒントにでもなれば・・・
>
> Visual Basic .NET では配列の下限が常に 0 になる
> http://naruokashiki.blog38.fc2.com/blog-entry-196.html

ありがとうございます。
ご提示頂いたURLの内容を参考にし、添え字が0以外の配列は System.Array クラスへキャスト可能な事が分かりました。

object o = // Excel から返ってきた何か
Array arr = (Array)o;

後は、System.Array クラスの GetLength、GetLowerBound、GetUpperBound、GetValueメソッドを使用すれば、
特定の添え字の値を取り出したり、または配列に入れなおしたりする事も可能なようです。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -