We're sorry Aspose doesn't work properply without JavaScript enabled.

Free Support Forum - aspose.com

[Aspose.Cells.Cell]Cell.getValue()を行うと、Double型と判断されてしまう。

Excelに、
セルの書式:標準、または数字として、
11111 という整数を入力します。

このExcelから、Asposeで文字列抽出しようとすると、
Cell.getValue()が、Double型と判断され、
11111.0 として抽出されてしまいます。

11111 として抽出されるべきと考えていますが、いかがでしょうか?

@KazukiEndou,

はい、値はdoubleとして格納されるため、予想される動作です。 この目的のために、Cell.getStringValue()またはCell.getIntValue()を使用してみてください。

回答ありがとうございます。
ご提案の方法ですと、以下のパターンが正しく抽出できなくなってしまいます。

例えば、
セルの書式:数字で、
11.11と入力されると、Excelセル上は、11と表示され、実際の値は、11.11 となります。

Cell.getStringValue() → 11
Cell.getIntValue() → 11

何かいい方法はないでしょうか?

@KazukiEndou,

値がdoubleの場合(たとえば、「11.11」)、確かに、getIntValue()メソッドは小数点を与えず、「11」のみを与えます。 Cell.getStringValue()→11の場合、MSExcelがセルに表示する値が表示されます。

値がdecimal/doubleの場合は、getDoubleValue()メソッドを使用する必要があります。

上記回答より、以下を使い分ける必要があると思いました。
・Cell.getStringValue()
・Cell.getIntValue()
・Cell.getDoubleValue()

その場合、以下の例では、どのように使い分けする必要がありますでしょうか?

セルの書式:数字
A1のセルに、1111 を入力
A2のセルに、11.11 を入力

実際に、Javaで以下のように、値を取得し、instanceofで判断しようとしています。
Object cellObj = cell.getValue();
if (cellObj instanceof Double) {
・・・
} else if (cellObj instanceof Integer) {

しかし、1111も、11.11も、instanceof Doubleと判断されてしまい、
1111.0 と 11.11 となってしまいます。

1111 は、 1111 で、
11.11 は、 11.11 で取得したいです。 判断方法はありますでしょうか?

@KazukiEndou,
ms excelまたはaspose.cellsが、バックアップされたデータモデルで常にintとしてint値を保持するという保証はありません。 実際、ms excelには「int」値型はなく、Excelのテンプレートファイルからintとして表すことができる1つのdouble値を取得することは非常に可能です。
コンポーネントの場合、int値はセルデータモデルでもintまたはdoubleとして保持される場合があります。 使用するデータのタイプは、パフォーマンスの考慮事項、メモリモード、計算などの多くの要因によって異なります。 また、使用されるタイプは、異なるバージョンのコンポーネントの進化中に変更される可能性があります。
状況に応じて、セルからDoubleオブジェクトを取得するときに、整数として取得できるか、(int)doubleValue == doubleValueのようにdoubleである必要があるかどうかを判断するために、追加のチェックを追加できると思います。