5

VSTOアドインがあり、Excelワークシートからデータを読み取っています。

ほとんどすべての数値データがとして読み取られるよう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;

ワークシートSheet1、セルA1で使用する形式に関係なく、isInt常にfalseが返されます。

取得するために使用する必要のある形式はありますintか?General多分うまくいくかと思い0ましたが、そうではないようです。

4

4 に答える 4

2

Range.Valueによって返される数値はdoubleです(Excelではすべてdoubleとして格納されているため、整数のように見えるかどうかはフォーマットの結果である可能性があります)

GetValueを介して私が見た唯一のintは、エラーのErrorCodesです

例えば

  • DIV / 0!値が-2146826281のInt32です
于 2012-07-09T15:19:08.777 に答える
1

Govertは、Excelが数値を整数として格納することは決してないと言っているのは正しいです。

Excelは、数値を数値として、または略しDouble Precision Floating Pointて知っているように格納します。Doubles

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

編集

あなたはリンクを探しているので、これを見てください

リンク:http ://support.microsoft.com/kb/78113

于 2012-07-09T15:29:29.780 に答える
1

Excelではすべての数値が2倍になると確信しています。たとえば、次の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です
于 2012-07-09T15:33:23.087 に答える
0

ドキュメントを呼び出すとvar value = ((Range)w.Cells[1,1]).Value、タイプValueはワークシートの値タイプから派生します。したがって、Excelワークシートの値はsdoublesではなく、としてフォーマットされているように見えますint。C#に変換されるExcelの「整数」形式はありません。最善の策は、値integerを読み込んだときに値をキャストすることです。Valueタイプは、Excelワークシート内の形式に関係なく提供されます。

この記事では、Excelが倍精度浮動小数点値を処理する方法を示します。

于 2012-07-09T15:01:56.787 に答える