/ / Získajte hodnotu bunky tak, ako bola prezentovaná v Exceli - java, apache-poi

Získajte hodnotu bunky tak, ako bola prezentovaná v programech excel - java, apache-poi

Momentálne pracujem na projekte, ktorý číta súbor programu Excel pomocou Apache POI.

Moja úloha sa javí byť jednoduchá, musím ju len splniťhodnota bunky tak, ako bola zobrazená v súbore programu Excel. Som si vedomý vykonania príkazu switch na základe typu bunky bunky. Ale ak sú dáta niečo ako

9,000.00

POI mi dáva 9000.0 keď to robím getNumericCellValue(). Keď prinútim bunku, aby bola strunového typu a urobila getStringCellValue() to mi potom dáva 9000. Potrebujem údaje, ako boli prezentované v programe Excel.

Našiel som nejaký príspevok, ktorý hovorí, že ho mám použiť DataFormat triedy, ale podľa môjho chápania vyžaduje, aby váš kód poznal formát, ktorý bunka má. V mojom prípade neviem o formáte, ktorý by bunka mohla mať.

Ako teda môžem zistiť hodnotu bunky tak, ako bola prezentovaná v programe Excel?

odpovede:

18 pre odpoveď č. 1

Excel ukladá niektoré bunky ako reťazce, ale väčšinou akočísla, na ktoré sa vzťahujú špeciálne pravidlá formátovania. Čo musíte urobiť, je nechať tieto pravidlá formátovania spustiť proti číselným bunkám, aby ste vytvorili reťazce, ktoré vyzerajú ako v Exceli.

Našťastie má Apache POI triedu, ktorá robí práve toto - DataFormatter

Všetko, čo musíte urobiť, je niečo ako:

 Workbook wb = WorkbookFactory.create(new File("myfile.xls"));
DataFormatter df = new DataFormatter();

Sheet s = wb.getSheetAt(0);
Row r1 = s.getRow(0);
Cell cA1 = r1.getCell(0);

String asItLooksInExcel = df.formatCellValue(cA1);

Nezáleží na tom, aký je typ bunky, DataFormatter ju naformátuje čo najlepšie pre vás pomocou pravidiel použitých v programe Excel


0 pre odpoveď č. 2

Použi CellType môžete skontrolovať všetky veci

if (cellValue.getCellType() == Cell.CELL_TYPE_NUMERIC)

// hodnota bunky je Číselná

if (cellValue.getCellType() == Cell.CELL_TYPE_STRING)

// cellValue je String

dátum je tiež uvedený ako numerický, v tom čase skontrolujte, či je daná bunka dátumom alebo nie pomocou dátumUtil

if (DateUtil.isCellDateFormatted(cellData))

potom, čo môžete previesť celkovú hodnotu na dátum