Excel przechowuje prawie wszystkie numery w formacie pliku jako wartości zmiennoprzecinkowych, dlatego POI oddać podwójne dla komórce numerycznej jak to, co naprawdę tam
wierzę, choć nie jest jasne, z twojego pytania, że to, co chcesz zrobić, to uzyskać obiekt String w Javie, który zawiera numer tak, jak by wyglądał w Excelu? tj. zastosować reguły formatowania zastosowane do komórki do nieprzetworzonej liczby i przywrócić sformatowany ciąg znaków?
Jeśli tak, chcesz zrobić dokładnie to samo as in my answer here. Aby zacytować:
Co chcesz zrobić, to użyć DataFormatter class. Przekazujesz tę komórkę i stara się ona zwrócić ci ciąg zawierający to, co Excel pokazałby ci dla tej komórki. Jeśli przekażesz komórkę ciągu, otrzymasz ciąg z powrotem. Jeśli przekażesz komórkę numeryczną z zastosowanymi regułami formatowania, sformatuje ona liczbę na podstawie tych wartości i przekaże ci ciąg znaków.
Dla twojej sprawy, zakładam, że komórki numeryczne mają zastosowanie do nich reguła formatowania liczb całkowitych. Jeśli poprosisz DataFormatter o sformatowanie tych komórek, otrzymasz z powrotem ciąg znaków z ciągiem całkowitym w nim.
Edit A dla tych z was, którzy najwyraźniej znaleźć clicking through to the JavaDocs to be just that little bit too much work..., trzeba użyć metody DataFormatter.formatCellValue(Cell). Jeśli iteracji, chcesz zrobić coś wzdłuż linii:
Workbook workbook = WorkbookFactory.create(new File("input.xlsx"));
DataFormatter formatter = new DataFormatter();
Sheet s = workbook.getSheetAt(0);
for (Row r : s) {
for (Cell c : r) {
System.out.println(formatter.formatCellValue(c));
}
}
byłbym naprawdę wdzięczny jeśli podasz swoje rozwiązanie w kodzie – winklerrr