Excelに、
セルの書式:標準、または数字として、
11111 という整数を入力します。
このExcelから、Asposeで文字列抽出しようとすると、
Cell.getValue()が、Double型と判断され、
11111.0 として抽出されてしまいます。
11111 として抽出されるべきと考えていますが、いかがでしょうか?
Excelに、
セルの書式:標準、または数字として、
11111 という整数を入力します。
このExcelから、Asposeで文字列抽出しようとすると、
Cell.getValue()が、Double型と判断され、
11111.0 として抽出されてしまいます。
11111 として抽出されるべきと考えていますが、いかがでしょうか?
はい、値はdoubleとして格納されるため、予想される動作です。 この目的のために、Cell.getStringValue()またはCell.getIntValue()を使用してみてください。
回答ありがとうございます。
ご提案の方法ですと、以下のパターンが正しく抽出できなくなってしまいます。
例えば、
セルの書式:数字で、
11.11と入力されると、Excelセル上は、11と表示され、実際の値は、11.11 となります。
Cell.getStringValue() → 11
Cell.getIntValue() → 11
何かいい方法はないでしょうか?
値が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である必要があるかどうかを判断するために、追加のチェックを追加できると思います。