Bazen kullanıcılara raporları Microsoft Office Dökümanıları (Word, Excel, Powerpoint vs.) olarak vermemiz istenir. Bunun için Java’da kullanabilceğimiz bir çok kütüphane mevcut. Bana göre bu kütüphanelerden en iyisi Apache grubunun yazmış olduğu POI isimli kütüphane. Poi’nin destek verdiği döküman formatları, Excel, Word, Powerpoint, OpenXML4J, OLE2 Filesystem, OLE2 Document Props, Outlook, Visio ve Publisher. Bu formattaki dokümanları okuyabilir ve yazabiliriz.
Apachi Poi’nin 3.2 versiyonunu COMPASS adlı bir projede kullanmaktayım.Şirkette Excel 2007 kullanılsada, Poi Excel satırlarına erişimde short türünden değişken kullandığı için mecburen 32767 satır kullanabiliyorum (Short.MIN_VALUE == -32767 , Short.MAX_VALUE == 32767). İlk başlarda bu pek bir sorun yaratmasa da rapor olarak sunulan veri arttırkça satır sayıları yetmemeye başladı. Bu sorunu başka bir sheet oluşturarak halledebiliriz ama apache, poi’nin yeni (!) bir sürümünü yayınlamış (version 3.5) ve bu sürümde Excel 2007′ye de destek vermiş. Şuanki en güncel sürüm ise 3.6
Poi Excel Api olarak HSSF isminde bir kütüphane sunuyor. Bu kütüphanede yukarıda bahsetttiğim gibi satırlara erişim için short tipinde sayılar kullanılıyor. Yeni sürümde bu kütüphaneye ek olarak XSSF isimli bir kütüphane daha eklenmiş. Bu kütüphane OOXML destekleniyor.
Poi’nin kullanımı hakkında biraz bilgi vermek gerekirse öncelikle http://poi.apache.org/ adresinden poi’nin güncel sürümünü indirin. İndirdiğiniz sıkıştırılmış dosyayı açıktan sonra /poi-3.6 , /poi-3.6/lib ve /poi-3.6/ooxml-lib altındaki jar dosyalarını projenize kütüphane olarak ekleyin.
Yeni Workbook oluşturma:
Yeni workbook oluşturmak için XSSFWorkbook sınıfından yaralanıyoruz.
1 | XSSFWorkbook workbook = new XSSFWorkbook(); |
Oluşturulan Workbook’a yeni Sheet Eklemek:
1 | XSSFSheet sheet = workbook.createSheet("Sheet Adı"); |
Bu şekilde çalışma kitabına istediğimiz kadar sheet ekleyebiliriz.
Sheet’e yeni satır ve hücre eklemek:
1 2 3 | XSSFRow row = sheet.createRow(0); XSSFCell cell = row.createCell(0); cell.setCellValue("Merhaba Dünya"); |
Bu kodlar A1 hücresine Merhaba dünya yazıyor. createRow ve createCell fonksiyonların integer olarak gönderdiğimiz sayılar satır ve sütün numaralarını temsil ediyor. Satır ve sütünları 0 dan başladığını kabul ediyoruz. Örn 10′a 15 değerleri K16 hücresini temsil ediyor.
Oluşturulan Workbook’u dosyaya yazmak:
1 2 3 4 | File file = new File("C:\\demo\\demo.xlsx"); FileOutputStream outputStream = new FileOutputStream(file); workbook.write(outputStream); outputStream.close(); |
toparlarsak:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public static void main(String[] args) { try { File file = new File("C:\\demo\\demo.xlsx"); FileOutputStream outputStream = new FileOutputStream(file); XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("Kamil ÖRS"); XSSFRow row = sheet.createRow(10); XSSFCell cell = row.createCell(5); cell.setCellValue("Merhaba Dünya"); workbook.write(outputStream); outputStream.close(); } catch(Exception e) { System.out.println("Error: " + e); } } |
İşte bu kadar. Bu örnekte dikkat ettiyseniz OOXML destekleyen sınıfları kullandık. Eğer ki Office 2003 ve daha düşük sürümler için excel çıktısı oluşturacaksanız buradaki XSSF ile başlayan sınıflar yerine HSSF ile başlayanları kullanmanız lazım. Ayrıca createRow ve createCell fonksiyonlarınada integer yerine short türünden parametreler göndermeniz gerekiyor.

Bir dahaki sefere Poi ile hücrelere nasıl biçim verebileceğimize bakarız
Programlama ve hayata dair yazılar yazdığım bloguma hoş geldiniz.
Adım Kamil. 23 yaşındayım. Yazılım geliştiricisiyim. Selçuk Üni. Bilgisayar Programcılığı
bölümünden mezunum. Açık Öğretim İktisat Fakultesi 3. sınıf öğrencisiyim. Profesyonel hayatımda java ve php tabanlı
yazılımlar geliştirmekteyim. Antalya'da bir turizm firmasında yazılım geliştirme
uzmanı olarak çalışmaktayım.

