2012-03-08 5 views
0

私はvbaからC#にアプリを変換しています。それはゆっくりと進みます。ここに私の最初の挑戦は... VBAでExcelワークシートはどのタイプのものですか。返品

だ、私はVBA二次元配列にExcelの範囲を割り当てることができます。私は、C#に変換する場合

Dim strSheetArray as Variant 
strSheetArray = xlSH.UsedRange 
... 
debug.print strSheetArray[1,2]  'etc. 

、「UsedRange」プロパティが返すように思えますオブジェクト。私は配列のようにそのオブジェクトを使用して、コード時エラーを取得することはできません。では、返されたオブジェクトをどのように参照すれば、それを反復処理することができますか?

そして、私がそれをしている限り、細胞には型がないので、どのように使用するのですか(いくつかは数字、その他はテキストなどです).VBではかなり簡単でした....

ご協力ありがとうございます。

+0

私はOffice Interopを使用しています。私のvbaプログラムもAccess2007からそれを使いました.... –

+0

あなたは 'strSheetArray'を割り当てるときに" Set "を使用していないので、あなたが実際に得ているのは' Range'のデフォルトプロパティの戻り値です。 「値」である。 'strSheetArray = xlSH.UsedRange.Value'を呼び出すのと同じです。C#で配列を読み込む方法については、ここを参照してください。これはあなたが後になったと思います。http://social.msdn.microsoft.com/Forums/pl/ exceldev/thread/808ec772-cf5b-4589-a8ec-7a01683f7537 –

答えて

2

範囲インターフェイスを返します。あなたはそれについてもっと読むことができますat MSDN

そして、私がそれをしている限り、細胞にはタイプがないので、どのように使用するのですか(いくつかは数字、その他はテキストなどです)。vbaではかなり簡単でした... 。

セルには型がありますが、それらは単なるオブジェクトです。あなたが望むものにキャストする必要があります。あなたは、彼らが番号を知っていた場合は、同様の数値型にキャストする必要があります

(string)xlSheet.Cells[row,col].Value2 

または

xlSheet.Cells[row,col].Value2.ToString(); 

:セルはテキストがあるのであれば、あなたのような何かを行う必要があります。


編集基づくコメント:だからあなたはあなたがこれを行うだろう使用の範囲を取得したい場合は

using Excel = Microsoft.Office.Interop.Excel; 

Excel.Range range = xlSheet.UsedRange; 

これはあなたのワークシートからすべてを与えるだろうが(私が使用する変数xlSheetこれはExcel.Worksheetです)。

は、今、私たちが行うことで、この上で繰り返すことができます。これは、範囲を反復処理すると、基本的には、コンソールウィンドウで、スプレッドシートにあるもので複製されます

int rows = range.Rows.Count; 
int cols = range.Columns.Count; 

for(int r=1; r <= rows; r++) 
{ 
    for(int c=1; c <= cols; c++) 
    { 
     Console.Write(range.Cells[r,c].Value2.ToString()); 
    } 
    Console.WriteLine(); 
} 

。私はこれが役立つことを願っています私はまた、あなたが望むならば、hereを読むことができるC#を使ってExcelスプレッドシートを読むことについてのブログ投稿を書いた。

+0

質問に間違いがありました。 C#の多次元配列にすべての範囲を戻したいので、かなり遅いInteropへの何百回もの移動を避けます。そして、私は完全に配列で作業したいです。 私はInteropの使い方を理解していますが、C#のオブジェクトに範囲を割り当てることで、 "System.Object [、]"タイプのオブジェクトであることが分かります。今私は何をしますか? Intellisenseは "Object [、]"型の変数に割り当てることはできません。 –

+0

@ JimS-Indy私の返答を更新しました。うまくいけばそれはより多くを助けます。 – Jetti

+0

Excelシートで結合されたセルの場合は機能しません –

関連する問題