2010-12-03 3 views
3

私はcsharpにExcelからセルを取得しようとしていますが、それを読み込むには最良の変数タイプが何であるかわかりません。VSTOを使用してExcelのセル値を最もよく取り出す方法を教えてください。

変数を文字列にしてセルの値をdoubleにすると、解析エラーが発生します。変数をdoubleにして、セルが文字列のときは動作しません。あなたは、細胞の外に値を得た後、右のタイプを見つける、

try 
{ 
     string i = Globals.Sheet1.Cells[7, 7].Value; 
     double num; 
     if (i == null) return; 

     if (double.TryParse(i, out num)) 
     { 
       . 
       . 
       . 
     } 
} 
catch (Exception e) 
{ 
     MessageBox.Show(e.ToString()); 
} 

答えて

4

が対象ください:

は、ここで私が実行しているコードです。

私はVSTOについてはわかりませんが、Excel InteropアセンブリではValue2とTextプロパティがあり、両方ともオブジェクトを返し、多型を介して正しい型にキャストできました。 VSTOはそれらを提供しないのですか?

+1

列FOO =((範囲)MyWorksheet.Cells [2、3])Value2.ToString(); –

+1

同じ問題のため、私はこのSOの記事を読んでいませんでしたが、.Textの問題は、Value2でDateTimeをセルに保存していた問題を解決しました。代わりに私に二重の値を返して、.Text.ToString()を使用すると、私が望むフィールドのテキスト値が返されました。私は.Textプロパティを知りませんでした。ありがとう。 – TravisWhidden

0
値が数値またはテキストである場合は、単にオブジェクトのtoString()を呼び出すことができ、その後double.TryParseは()を参照してください

0

単に

double x = (double)Globals.Sheet1.Cells[7, 7].Value; 

あなたのdouble値を取得しますか例外をスローします(これをキャッチする必要はありません。上流にキャッチするものがなければExcelのダイアログボックスに正しく表示されます)。

0

私はテキスト値を直接取得することを好み、ほとんどの場合、基礎となるデータ型を処理したくありません。私はTravisWhiddenコメントが記載されているテキスト値を取得、ここで私のVSTO C#コードは、セルからの読み取りを達成し、ベースオブジェクトに関係なくテキスト値を返します。

ワークページのオフ動作し、この私の拡張方法:。

public static string CellGetStringValue(this WorksheetBase theSheet, int row, int column) 
{ 
    var result = string.Empty; 

    if (theSheet != null) 
    { 
     var rng = theSheet.Cells[row, column] as Excel.Range; 

     if (rng != null) 
      result = (string) rng.Text; 
    } 

    return result; 
} 
+0

@ TravisWhidden私はあなたの意見をアドバイスとして受け取り、 'Text'を使って値を取得する拡張機能を作成しました。その質問に対する答えとして投稿しました。 – OmegaMan

0
try 
{ 

    dynamic mycell = Globals.Sheet1.Cells[7, 7]; 
    double num; 
    if (mycell.Value == null) return; //you can use mycell.Text too. 

    if (double.TryParse(mycell.Text, out num)) 
    { 
      . 
      . 
      . 
    } 
} 
catch (Exception e) 
{ 
     MessageBox.Show(e.ToString()); 
} 
関連する問題