2012-07-09 19 views
5

私はVSTOアドインを持っており、Excelワークシートからデータを読み込んでいます。VSTOのRange.Valueからintを取得することは可能ですか?

ほとんどすべての数値データはdoubleと表示されているようです。 intの値をRange.Valueから取得することは可能ですか?

ここに、私が意味するものを示すためのコードがあります。

Worksheet w = (Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets["Sheet1"]; 
var value = ((Range)w.Cells[1, 1]).Value; 
bool isInt = value is int; 
bool isDouble = value is double; 

私はワークシート1に使用形式に関係なく、セルA1、isIntは常にfalse戻ってきます。

intを取得するために使用する必要がある形式はありますか?おそらくGeneralまたは0がうまくいくと思いましたが、そうは思われません。

+1

ですint - Excelは数値をintとして内部的に格納しません。常にdoubleです。 – Govert

+0

@Govertわかりました。それは私が疑ったものですが、私は確認を求めていました。あなたが答えを投稿したら(できればそのExcelのおしゃべりに関する情報源で)私はそれを受け入れます。 –

答えて

0

var value = ((Range)w.Cells[1,1]).Valueを呼び出すと、Valueタイプはワークシートの値タイプから派生しています。したがって、Excelワークシートの値はdoublesであり、intではなくなります。 C#に変換するExcel用の「整数」の書式はありません。integerの値をキャストすることをお勧めします。Value型は、Excelワークシート内のどのような書式でも入力できます。

This articleは、Excelが倍精度浮動小数点値を処理する方法を示しています。 Range.Valueによって返さ

+0

そうですが、私の質問は本質的に「どのようなワークシート形式が私にintを与えるのですか?」小数点以下の桁数、テキスト、会計はすべて二倍になります。私は何かを逃しているのですか、そういう形式はありませんか? –

+1

ああ、ちょっとした研究をすると、数値が常にExcelに倍精度として格納されているように見えます。ワークシートのint型のようなカスタム形式を作成できますが、C#から値を照会すると、double型として返されます。値を(倍精度で)**本当に**整数にすることが保証できますが、これを行うと、intとしてキャストできます。 – NominSim

+0

入手しました。 Excelに格納されている倍精度だけについてソースを提供できますか? –

2

数値は(整数ように見えるかを数は、フォーマットの結果であり、これらは全てExcelでダブルスとして格納されている可能性becuase)倍である

私が見ているだけのint GetValueを介して来るエラーのエラーコードは

  • DIV/0! -2146826281の値を持つInt32です。
1

Govertは、Excelが整数を決して格納しないという意味で正しいです。

Excelには数値がDouble Precision Floating Pointと数値で格納されていますが、ご存知のようにDoublesと表示されています。

Doublesは、小数点以下15桁までの正確な数値を格納できる8バイトの変数です。

EDIT:私はすべての数字は、Excelでダブルスているかなり確信してhttp://support.microsoft.com/kb/78113

1

あなたがリンクを探しているので、この

リンクを参照してください。たとえば、次のVBAコードでは、セル値を長い整数(Int32)に設定し、それを読み込みます。

Dim n As Long 
n = 123 
Range("A1").Value = n 
Debug.Print VarType(n) 

Dim v As Variant 
v = Range("A1").Value 
Debug.Print VarType(v) 
  • 入力のVarType(N)= 3 = vbLong(Int32)を
  • 出力は、私はあなたがこれまでに取得したいとは思わないのVarType(V)= 5 = vbDouble
関連する問題