IT: Excel v Jave? POI!

Donedávna jsem považoval za jediný smysluplný formát dat XMLko. V současnosti zjišťuji, že se ve světě ještě nepodařilo vymítit formáty typu *.xls (Excel Worksheet) či *.csv (Comma Separated Variables) – stále jsou tu 😉

V rámci projektu na kterém teď pracuju jsem potřeboval dostat z 10 megového Excel sheetu tisíce hodnot a transformovat je do výstupních CSV souborů. Podle výstupního souboru se lišila kombinace sloupců a jejich transformace. Samozřejmě že by to šlo vyřešit a smést ze stolu rychlým sledem copy&pastů v Excelu a maximálně použitím nějakého makra.

Dostávám se k jádru věci. Rozhodl jsem se pro řešení v javě. Zasvěcení asi vědí, že se k práci s Microsoft Office soubory používá open-source knihovna Jakarta POI.

Takže moje poznatky: pro práci s Excelovskými tabulkami vás zajímá jen jedna část POI – POI-HSSF. Načíst Excelovský dokument a vybrat z něj hodnoty které potřebujete je po rychlém nahlédnutí do Quick guidu záležitost pár minut. Co mě potěšilo je, že to opravdu funguje.

Jenom jsem musel pro načtení 10 MB XLS souboru jsem musel zvětšit heap VM (-Xmx196M zabralo).

Další malou záludností je iterátor přes buňky v řádku (hssfRow.cellIterator()). Nevracel buňky tak jak byste čekali, ale v jakémsi fyzickém pořadí a na v logickém. Zatím jsem nestudoval o co jde. Stačí použít hssfRow.getCell(int).

A nakonec abyste měli představu jak vypadá API sem dávám malý příklad:


FileInputStream fis = new FileInputStream(xlsFile)
POIFSFileSystem fs = new POIFSFileSystem(fis);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow(rowNumber);
HSSFCell codeCell = row.getCell(COLUMN_CODE);

Prostě jednoduché a funkční.

Dále jsem potřeboval jeden velký CSV soubor načíst a jiný zapsat.
S tímto formátem POI nepracuje. Takže jsem pro zápis použil normální PrintWriter a pro čtení knihovnu z ostermiller.org. K ní jedna malá poznámka – CSVParser vrací jen String[][], takže nebude zrovna moc vhodný pro veliké dokumenty.

Reklamy

Zanechat Odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

WordPress.com Logo

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit / Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Odhlásit / Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit / Změnit )

Google+ photo

Komentujete pomocí vašeho Google+ účtu. Odhlásit / Změnit )

Připojování k %s