Jul 5 2011

HSSF Nedir? Ne amaçla kullanılır ?

Gönderen : Yunus Özay (2:50 PM)
0 yorum
- Kategori : Coldfusion | Java | Workcube

CfCube.com

Apache POI adı ile anılan teknoloji java tabanlı olup Microsoft Office programları için kütüphaneler oluşturur. Her Microsoft Office nesnesi için ayrı ayrı kütüphaneler oluşturulmuştur. HSSF olarak adlandırdığımız olay ise Microsoft Excel için oluşturulan kütüphanedir. HSSF, Excel dosyalarına (.xls) okuma ve yazma olanağı sağlar. Yani kullanacağınız HSSF fonksiyonları ile Excel dışından Excel’e müdahale etme şansınız doğar.

Nasıl Çalışır?

            HSSF java tabanlı olduğundan en önemli özelliği nesne yapısıdır. Yani oluşturacağınız her bir obje geri planda bir sınıfa bağlı olmak zorundadır. HSSF’de bunun için birçok sınıf tanımlanmıştır. Sayfa yapısını değiştirmek için PrintSetup, font yapısını değiştirmek için Font, hücre yapısını değiştirmek için Cell… Vb

            HSSF ile çalışırken düşünülmesi gereken ilk konu yapmak istediğiniz özelliğin hangi sınıfa ait olması ve bunun tek başına yeterli olup olmaması konusudur. Örneğin bir hücrenin font özelliğini değiştirmek istiyorsunuz. Bunun için Font sınıfında bulunan fonksiyonları tek başına kullanmak soruna çözüm olmaz. Çünkü bu değiştirdiğiniz fonksiyonu hücrenize uygulayabilmeniz için öncelikle o hücre ile ilişkilendirmeniz gerekir. İlişkilendirdikten sonra da o hücrenin style özelliği ile ilişkilendirmelisiniz. Basit kodlarla daha anlaşılır hale getirelim.

<cfset file_name = "deneme.xls">

Yukarıdaki kod bloğunda oluşturacağımızın excelin isim tanımlamasını yapıyoruz. Buraya kadarki kodların HSSF ile alakası yok. Buradan sonraki kısım HSSF ile alakalı kısım.

<cfset workBook = createObject("java","org.apache.poi.hssf.usermodel.HSSFWorkbook").init()/>

<cfset newSheet = workBook.createSheet()/>

<cfset workBook.setSheetName(0, "Yeni Excel Sistemi")/>

<cfset headerStyle = workBook.createCellStyle()>

<cfset font = workBook.createFont()>

<cfset printSetup = newSheet.getPrintSetup()>

İlk olarak Java’yı kullanarak apache.poi üzerinden bir çalışma kitabı oluşturuyoruz. Bundan sonraki kodda oluşturduğumuz çalışma kitabında bir sayfa oluşturup ismine “Yeni Excel Sistemi” dedik. Daha sonra HSSF kütüphanelerini yaratıyoruz. CellStyle, Font, PrintSetup gibi. Bu kütüphaneler bize kullanacağımız fonksiyonlar için kaynak teşkil edecekler.

<cfset printSetup.setPaperSize(PrintSetup.A4_PAPERSIZE)> // PrintSetup sınıfı sayfa yapısında karşımıza çıkan özellikleri değiştirebildiğimiz sınıftır. Sayfanın A4 yada A5 olması, kenarlık olup olmaması gibi…

<cfset font.setFontHeightInPoints(14)> // Font sınıfının bir fonksiyonu olan setFontHeightinPoints bize fontumuzun değerini değiştirir. Örnekte fontumuz 14 olarak değiştirilmiştir

<cfset font.setFontName("Arial")> // setFontName fonksiyonu ise anlaşılacağı gibi yazı tipimizi değiştirmeyi sağlar.

<cfset font.setItalic(true)> // setItalic fonksiyonu default değeri olarak false alır yani düz yazıdır. Kendisine true değeri gönderilirse italic yazacaktır.

<cfset headerStyle.setAlignment(2)><!---center= 2; normal= 0---> // setAlignment fonksiyonu hücredeki verinin ortalanıp ortalanmamasına karar verir. Dikkat edilmesi gereken nokta bu fonksiyon bir hücre fonksiyonudur. Yani her ne kadarda içerikteki yazıyı yada herhangi bir veriyi ortalıyor olsa da hücrenin style özelliğidir. Parametre olarak 2 verilirse veri ortalanır. 0 da normaldir.

<cfset font.setBoldWeight(700)><!---bold= 700; normal= 400---> // setBoldWeight fonksiyonu yazımızın bold yada normal kalınlıkta yazılmasına karar verir. Bold yazmak istiyorsak parametre olarak 700; normal yazmak istiyorsak 400 vermeliyiz

<cfset font.setColor(10)><!---1 Beyaz,5 açık sarı,6 pembe10, kırmızı, 20 bordo, 30 açık mavi, 40 turkuvaz, 50 çık yeşil,60 kiremit,70 siyah---> // setColor özelliği ise yazı rengimizi değiştirir. İçindeki parametreye göre her rengi alabilir. Bazı renklerin sayısal değerleri örneklendirilmiştir.

Bütün bunların yanı sıra HSSF tarafından birçok fonksiyon daha desteklenir. Arka plan rengi, yazının altının çizilmesi… vb

<cfset headerStyle.setFont(font)> // Az önce bahsettiğimiz font u hücre stili sınıfına ekliyoruz. Böylelikle değiştirdiğimiz font özellikleri yüklenmiş oluyor.

<cfset cell.setCellStyle(headerStyle)> // Son olarak hücre stilimizi hücremize atarak değiştirdiğimiz font özelliklerini görünür şekilde uygulamış oluyoruz. Bu iki kod satırını yazmadığımız takdirde font özelliklerini değiştirebiliriz ama bunu göremeyiz. Get özelliği ile istediğimiz fonksiyonun değerini görebiliriz. Ama uygulanmamış olurlar.

 

Son olarak bahsedeceğimiz konu page break olarak adlandırılan sayfa kırma özelliğidir. Bu özellik sayesinde istediğimiz anda sayfayı bölerek bir sonraki sayfanın istediğimiz şekilde başlamasını sağlamış oluruz. Ayrıca bu özellikle beraber istediğimiz kadar satırın sayfamızda görünüp fazla olan satırın bir sonraki sayfada işlenmesini sağlamış oluruz.Bunun için ilgili kod aşağıdaki satırdadır.

<cfif gercek_sira_ neq 1 and gercek_sira_ mod sayfa_satiri_ eq 0>

                        <cfif sheet_ eq 0>

                                   <cfset newSheet.setRowBreak(mmk)>

                        <cfelse>

                                   <cfset newSheet.setRowBreak((mmk - (sheet_ * sheet_satiri_)))>

                        </cfif>

            </cfif>

 

Burada yaptığımız kontrol sonucunda her sayfada ilk başta belirlediğimiz oranda kayıt bulunabilir. Ve aynı zamanda bir page break değeri atayabiliriz. Yani şu anlama geliyor. Diyelim ki sayfada sayfa satırı olarak 500 atamışsak ve page break sayısı olarak 25 değerini girmişsek (ki burada mmk olarak geçiyor) her 25 kayıttan sonra sayfamız bölünüp sonuç olarak 500 satırdan oluşan dosyamız her 25 satırda bir kırılarak 20 sayfa olarak çıktı verecektir. İlk if ifademiz bize ilk sayfadaki mmk ya göre değer verirken ikinci if ifademiz toplam kayıt sayısına göre sayfa bölmelerini sağlayacaktır.

<cfset toplam_kayit_ = 1400>

<cfset sayfa_satiri_ = 25>

<cfset sheet_satiri_ = 500>

Bu değerlerden çıkan sonuç şudur. Bizim toplam 1400 kaydımız bulunmaktadır. Her 500 kayıtta bir yeni sayfa açılacaktır. Ve her 25 satırda bir parça bölmeleri olacaktır.

 Artık verilerimiz hazır. Şimdi bu verilerimizi daha önceden ismini belirttiğimiz excel dosyasına yazıyoruz.


<cfset fileOutStream = createObject("java","java.io.FileOutputStream").init("#file_name#")/>

<cfset workBook.write(fileOutStream)/>

<cfset fileOutStream.close()/>

 

Yorumlar

Yorumunuzu YazInIz



(daha sonra görüntülenmeyecek)



Leave this field empty: