Heim  >  Artikel  >  Java  >  Wie kann das Problem des POI-Imports reiner Zahlen und anderer Formate über Java gelöst werden?

Wie kann das Problem des POI-Imports reiner Zahlen und anderer Formate über Java gelöst werden?

PHPz
PHPznach vorne
2023-05-09 20:13:061364Durchsuche

Poi importiert reine Zahlen und andere Probleme

Wenn Sie POI zum Exportieren von Excel verwenden und die Zelle auf reine Zahlen eingestellt ist, werden die Eingabedaten automatisch in wissenschaftlicher Notation angezeigt, sobald sie zu groß sind, was zu einem Fehler beim Import führt Die Lösung besteht darin, die Datei im Hintergrund zu exportieren. Die erzwungene Konvertierung von Zellattributen kann perfekt gelöst werden und eignet sich auch für Ausnahmen beim Datenimport, die durch andere Zellformate verursacht werden

Heute erhielt ich eine Anfrage von der Geschäftsseite, in der es hieß: Es handelt sich um den aus Excel importierten Betrag, und alles ist gerundet.

Dann habe ich den Code überprüft: Ich war zuerst geblendet und konnte es nicht ertragen. Aber denken Sie darüber nach, als Programmierer können Sie sich nicht weigern, den Menschen zu dienen. Also habe ich es debuggt. Ich war wirklich faul und wollte den Code nicht direkt verfolgen, also ging ich zum Debuggen ...

Der Grund

Ich habe den spezifischen Grund gefunden:

Cell cellCode = r.getCell(1);
cellCode.setCellType(CellType.STRING);  
info.setCode(r.getCell(1).getStringCellValue());

Im obigen Code ist die Zahl als Ganzzahl formatiert . Natürlich ist es kein Problem, wenn Sie den Wert direkt erhalten.

lautet wie folgt:

if (xssfRow.getCellType() == Cell.CELL_TYPE_NUMERIC) {
    DecimalFormat format = new DecimalFormat("#");
    double num = xssfRow.getNumericCellValue();
    String res = format.format(num);
    //……
}

DecimalFormat

DecimalFormat ist eine konkrete Unterklasse von NumberFormat, die zum Formatieren von Dezimalzahlen verwendet wird. Helfen Sie dabei, Zahlen so schnell wie möglich so zu formatieren, wie Sie es benötigen. DecimalFormat enthält ein Muster und eine Reihe von Symbolen.

Die DecimalFormat-Klasse basiert hauptsächlich auf zwei Platzhaltersymbolen, # und 0, um die Zahlenlänge anzugeben. Symbole wie „####.000“. Dieser Modus bedeutet, dass es vier Ziffern vor dem Komma gibt. Wenn nicht genug davon vorhanden sind, lassen Sie sie leer. Wenn nicht genügend Ziffern vorhanden sind, füllen Sie sie mit 0 auf.

Symbolbedeutung:

0 eine Zahl
  • # eine Zahl, außer 0
  • Platzhalter für Dezimaltrennzeichen
  • , Platzhalter für Gruppierungstrennzeichen
  • – Standardmäßiges negatives Präfix .
  • % mit 100 multipliziert und als Prozentsatz angezeigt
  • Beispiel:
  • 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);
        //……
    }

Das obige ist der detaillierte Inhalt vonWie kann das Problem des POI-Imports reiner Zahlen und anderer Formate über Java gelöst werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen