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

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

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

Re[4]: 「エクセルの特定セル範囲に入っている値を配列に


(過去ログ 27 を表示中)

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

■12858 / inTopicNo.1)  「エクセルの特定セル範囲に入っている値を配列に入れる」には
  
□投稿者/ トーパ (1回)-(2008/01/18(Fri) 18:27:25)

分類:[C#] 

エクセルの特定セル範囲に値を入力する方法として、
「http://support.microsoft.com/kb/306023/ja」に配列を用いる方法が掲載されていますが、
逆に、「エクセルの特定セル範囲に入っている値を配列に入れる」には、どうしたら良いのでしょうか?

最後の4行でそれを行おうとしていますが、最終行でエラーとなってます。
ご教示、お願いいたします。

string strFileName = textBox1.Text; // 読み込むファイル名

m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)m_objBooks._Open(strFileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
m_objBook = m_objExcel.ActiveWorkbook;
m_objSheets = (Excel.Sheets)m_objBook.Sheets;

// ワークシートを選択
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
// Microsoft Excel を表示する
m_objExcel.Visible = true;

m_objRange = m_objSheet.get_Range("AU32", Type.Missing);
string strCelValue = m_objRange.get_Value(Type.Missing).ToString();
textBox3.Text = strCelValue.ToString();     //セルAU32の内容が表示される

object[,] objData = new Object[9, 9];	//10x10の配列準備
m_objRange = m_objSheet.get_Range("A1", "J10");
//m_objRange = m_objRange.get_Resize(10, 10);
objData = m_objRange.Value;


//C# 2005です。

引用返信 編集キー/
■12862 / inTopicNo.2)  Re[1]: 「エクセルの特定セル範囲に入っている値を配列に入れる」には
□投稿者/ 魔界の仮面弁士 (578回)-(2008/01/18(Fri) 19:20:19)
No12858 (トーパ さん) に返信
> 最後の4行でそれを行おうとしていますが、最終行でエラーとなってます。
object[,] ではなく、object で受けてみて下さい。

> object[,] objData = new Object[9, 9]; //10x10の配列準備
左辺が小文字 object で、右辺が大文字 Object なのが気になる…。(^^;
引用返信 編集キー/
■12865 / inTopicNo.3)  Re[2]: 「エクセルの特定セル範囲に入っている値を配列に入れる」には
□投稿者/ トーパ (2回)-(2008/01/18(Fri) 20:06:51)
No12862 (魔界の仮面弁士 さん) に返信
ありがとうございました(^^;;  O→o
# object objData = new object[9, 9];	//10x10の配列準備
# m_objRange = m_objSheet.get_Range("A1", "J10");
# objData = m_objRange.Value2;
#       //そして、↑Value が無くて Value2 でした。何だろう…。

すみませんが、もう一つ教えて頂きたいことがあります。
上記によりobjDataに代入した後、配列の中の任意の値を表示させるには、
どのようにするのでしょうか。

MessageBox.Show(objData[5,5].ToString());

ではダメですよね…。
よろしくお願いいたします。

引用返信 編集キー/
■12870 / inTopicNo.4)  Re[3]: 「エクセルの特定セル範囲に入っている値を配列に入れる」には
□投稿者/ 魔界の仮面弁士 (580回)-(2008/01/18(Fri) 21:37:44)
No12865 (トーパ さん) に返信
> # objData = m_objRange.Value2;
セルの値が通貨型だった場合、Value は Decimal を、Value2 は Double を返します。
セルの値が日付型だった場合、Value は DateTime を、Value2 は Double を返します。
それ以外の場合は、同じ結果になります。


> # //そして、↑Value が無くて Value2 でした。何だろう…。
C# は「引数を持ったプロパティ」をサポートしていないため、Value プロパティを C# から利用できません。
(Excel 2000 以下の場合は、Value プロパティが引数を持たないため、C# からも利用可能ですけれども)

代わりに、get_Value/set_Value メソッドが用意されますので、そちらを利用してください。
トーパさん御自身、No12858 でもそうしていますよね?


> 上記によりobjDataに代入した後、配列の中の任意の値を表示させるには、
> どのようにするのでしょうか。
取得した結果を、そのままキャストするだけで良いかと。
 object objData = m_objRange.get_Value(Type.Missing);
 object[,] arrayData = objData as object[,]

ただし、Excel から返される配列は、0 ベースの配列ではなく、1ベースの配列である点に注意が必要です。


No12858 (トーパ さん) に返信
> m_objBook = (Excel._Workbook)m_objBooks._Open(strFileName, Type.Missing, …);
> m_objBook = m_objExcel.ActiveWorkbook;
もし、両者が異なるブックだと想定しているなら、別の変数に受ける必要がありますし、
同じブックだというのであれば、2 番目のコードが冗長ですよね。(^^;
引用返信 編集キー/
■12875 / inTopicNo.5)  Re[4]: 「エクセルの特定セル範囲に入っている値を配列に
□投稿者/ トーパ (4回)-(2008/01/19(Sat) 09:50:59)
2008/01/19(Sat) 09:51:35 編集(投稿者)

魔界の仮面弁士 さま

アドバイスありがとうございました。
レベルの高い話で、いまいち理解し切れていませんが、
これから試行錯誤して理解していきます。
ひとまずお礼まで。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -