POIがJavaを介して純粋な数値やその他の形式をインポートする問題を解決するにはどうすればよいですか?

PHPz
リリース: 2023-05-09 20:13:06
転載
1461 人が閲覧しました

Poi は純粋な数値とその他の問題をインポートします

poi を使用して Excel をエクスポートする場合、セルが純粋な数値に設定されている場合、入力データが大きすぎると自動的に科学的表記法で表示されます。インポートされたデータにエラーが発生しました。解決策は、バックグラウンドでエクスポート ファイルを取得し、セル属性を強制変換することで、完全に解決できます。他のセル形式によって引き起こされるデータ インポート例外にも適しています

#
Cell cellCode = r.getCell(1);
cellCode.setCellType(CellType.STRING);  
info.setCode(r.getCell(1).getStringCellValue());
ログイン後にコピー

poi セルの内容の取得:数値の書式設定

本日、ビジネス側からエクセルで取り込んだ金額が四捨五入されているとの依頼を受けました。

それからコードをチェックしました。最初は目がくらんで、本当に耐えられませんでした。しかし、考えてみてください。プログラマーとして、人々への奉仕を拒否することはできません。そこで、デバッグしてみました。私は本当に怠け者で、コードを直接追跡したくなかったので、デバッグに行きました...

REASON

具体的な理由が見つかりました:

if (xssfRow.getCellType() == Cell.CELL_TYPE_NUMERIC) {
    DecimalFormat format = new DecimalFormat("#");
    double num = xssfRow.getNumericCellValue();
    String res = format.format(num);
    //……
}
ログイン後にコピー

In上記のコードでは、数値は整数としてフォーマットされます。もちろん値を直接取得しても問題ありません。

は次のとおりです。

if (xssfRow.getCellType() == Cell.CELL_TYPE_NUMERIC) {
    DecimalFormat format = new DecimalFormat("#");
    double num = xssfRow.getNumericCellValue();
    String res = format.format(num);
    // num 和 res 的取值差不多。 如: 50.00 : num 为 50.00,res 为 50; 123.23, num 为123.23, res为123.23
    System.err.println(num + "--" + res);
    //……
}
ログイン後にコピー

DecimalFormat

DecimalFormat は、10 進数の書式設定に使用される NumberFormat の具象サブクラスです。数値をできるだけ早く必要なものにフォーマットするのに役立ちます。 DecimalFormat には、パターンと記号のセットが含まれています。

DecimalFormat クラスは、主に 2 つのプレースホルダー記号 # と 0 に依存して数値の長さを指定します。 「

#.000」のような記号。小数点以下 4 桁、足りない場合は空白、小数点以下 3 桁、足りない場合は 0 を埋めるモードです。

記号の意味:

  • 0 数値
  • # 0 を除く数値
  • . 小数区切り文字プレースホルダー
  • 、グループ区切り文字プレースホルダー
  • - デフォルトの負の接頭辞。
  • % 100 を掛けてパーセンテージで表示します

例: ###
    public static void main(String[] args) {
        double pi=3.1415927;//圆周率
        //取一位整数
        System.out.println(new DecimalFormat("0").format(pi));//3
        //取一位整数和两位小数
        System.out.println(new DecimalFormat("0.00").format(pi));//3.14
        //取两位整数和三位小数,整数不足部分以0填补。
        System.out.println(new DecimalFormat("00.000").format(pi));//03.142
        //取所有整数部分
        System.out.println(new DecimalFormat("#").format(pi));//3
        //以百分比方式计数,并取两位小数
        System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%
 
        long c=299792458;//光速
        //显示为科学计数法,并取五位小数
        System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8
        //显示为两位整数的科学计数法,并取四位小数
        System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7
        //每三位以逗号进行分隔。
        System.out.println(new DecimalFormat(",###").format(c));//299,792,458
 
        System.out.println(new DecimalFormat("-###").format(c));//299,792,458
        System.out.println(new DecimalFormat("#.##?").format(c));//299,792,458
        //将格式嵌入文本
        System.out.println(new DecimalFormat("光速大小为每秒,###米").format(c)); //光速大小为每秒299,792,458米
    }
ログイン後にコピー

以上がPOIがJavaを介して純粋な数値やその他の形式をインポートする問題を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート