OpenOffice.org Basic Temel Bilgiler

From Belgeleme Projesi

Jump to: navigation, search

OpenOffice.org Basic Temel Bilgiler

Kısa süre önce yayınlanan 3.2 sürümüyle birlikte kullanım oranı iyice artan OpenOffice.org için Basic diliyle neler yapabileceğimizi anlatacağımız yeni bir yazı dizisine başlıyoruz.

Eski ofis programlarında kullandığımız VBScript gibi OpenOffice.org içerisinde de Basic, Python, JavaScript ve BeanShell kullanarak dilediğimiz işlemleri gerçekleştirebiliriz. Biz bu yazı dizimizde sadece Basic üzerinde duracağız.

Bu yazı dizisi; temel Basic ve programlama bilgisi olanlar için uygundur. Hiç programlama ve/veya algoritma bilmeyenlerin, öncelikle algoritma öğrenmelerini öneririm. Yazı dizimiz boyunca vereceğimiz tüm örnekler OpenOffice.org içerisinde çalışacaktır. Bu yazı dizisinde anlatılan Basic ile OpenOffice.org'dan bağımsız çalışan programlar yapılamaz. Burada Basic ile kastedilen aslında Basic Scriptler'dir. Basic ile bağımsız çalışacak programlar tasarlamak isteyen arkadaşlarımıza Gambas, FreeBasic, KBasic, VisualBasic gibi programlama dillerini öneririm.


Temel Adımlar

Şimdi lafı fazla uzatmadan OpenOffice.org içerisinde Basic programları nasıl yazacağımızı görelim.

Bunun için;

  1. OpenOffice.org bileşenlerinden (Calc, Writer, Base, Draw, Impress) herhangi birini açarak işe başlayabilirsiniz. Ben örneklerimde genellikle Calc'ı tercih edeceğim.
  2. Araçlar > Makrolar > Makroları düzenle > OpenOffice.org Basic yolunu takip edin. Karşınıza aşağıdaki diyalog kutusu gelecektir.


Resim:OOoBasic1.png

Bu diyalog kutusunda Makrodan başlığı altında üç temel bileşen göreceksiniz.

Bunlar; Makrolarım: Kullanıcının OpenOffice.org için yazdığı makroların tamamını bünyesinde barındırır. Bu bölümdeki makrolar OpenOffice.org içerisine eklenmiş ve hangi dosyayı açarsanız açın, etkisi devam eden makrolardır. OpenOffice.org Makroları: OpenOffice.org için yazılmış ve hayatı kolaylaştıran geliştirmelerin (Makroların) bulunduğu bölümdür. Bu bölüme bir nevi makro kütüphanesi denilebilir. An itibariyle açık olan dosyanız: Sadece ilgili dosyada etkili olan makroların bulunduğu bölümdür. İlgili dosya kapatıldığında içerisindeki makrolar da kapanır ve etkisini yitirir.

Diyalog kutusundaki düğmelerse;

  • Çalıştır: Seçilmiş makroyu çalıştırır.
  • Kapat: Diyalog kutusunu kapatır.
  • Ata: Bir makroyu herhangi bir kısayol, menü ya da simgeye atar.
  • Düzenle: Seçilmiş makroyu değiştirmek için Basic editörünü çalıştırır.
  • Sil: Seçilmiş makroyu siler.
  • Düzenleyici: Makroları, İletişim ögelerini, Menüleri ve kısayolları düzenler.
  • Yardım: Yardım'ı çağırır.

3.Biz yolumuza Düzenle düğmesine basarak devam ediyoruz. Bu sayede Basic kodları yazabileceğimiz aşağıdaki editör ekrana geliyor.
Resim:OOoBasic2.png

Basic editörümüzün görüntüsü basit olmakla birlikte, orta düzey bir bütünleşik geliştirme ortamında bulunması gereken hemen hemen bütün fonksiyonlara sahiptir. Programı çalıştırmak, Adım Adım ilerlemek, İstenilen satırlara Break Point (Durma Noktası) koymak ve bunun gibi daha birçok fonksiyonu bünyesinde barındırmaktadır. Biz bu bölümde editörün tüm fonksiyonlarını tek tek anlatmaktansa, yazı dizisi boyunca ihtiyaç duyulan ilgili bölümleri anlatmayı tercih edeceğiz.

Yazımızın başında da söylediğimiz gibi Basic programlama ve algoritma bilen arkadaşlar için zaten çok yabancılık çekmeyecekleri bir ortamdır. Dosya menüsünü açıp kodları şöyle kaydedebilirsiniz, böyle yazdırabilirsiniz demenin çok fazla bir gereği yok bu aşamada.

Makro Yazmaya Başlayalım

Artık yeni bir makro yazmaya hazırız. Ancak ilk dersten hemen kodlara boğulmaktansa biraz işin felsefesinden, neler yapabileceğimizden bahsedip, ufak bir örnekle ilk dersimizi tamamlayacağım.

Basic dilini kullananlar uzun yıllar boyunca vazgeçememişlerdir. Bunun başlıca sebebi öğrenilmesinin ve kullanılmasının tıpkı adından da anlaşılacağı üzere çok basit olmasıdır. Adının basit/temel anlamında olduğuna bakmayın hiç. Boyundan çok büyük işlerin altından kalkabilmektedir. OpenOffice.org Calc içerisinde zaten normal bir kullanıcının hemen hemen hiçbir zaman kullanmayacağı kadar çok hazır fonksiyon bulunmaktadır. Ancak mevcut fonksiyonlarla işinizi yapamıyorsanız o zaman imdada Basic yetişiyor.

Normal şartlarda Calc'ta bir hücre içerisindeki sayıyı, başka bir hücredeki sayıyla toplayıp sonucu yine aynı hücreye yazmak istediğiniz varsayalım. Yani A1=A1+B1 şeklinde bir ihtiyacımız olsun. Bunu normal yöntemlerle yazdığınızda hata mesajı alırsınız. Calc size içerisine formül yazdığınız hücrenin, formülü içerisinde aynı adresi kullanmanıza izin vermeyecektir. Bunun dışında normal fonksiyonları kullanarak İnternet'e bağlanıp bir siteden bazı bilgileri alıp getirmesini söyleyemezsiniz. Bir takım döngüler kurarak işlemleri defalarca tekrar ettiremezsiniz. Bu ve bunun gibi daha binlerce farklı ihtiyaç olabilir. Normal fonksiyonlarla karşılanamayacak bu ihtiyaçları, Basic makroları yazarak rahatlıkla OpenOffice.org içerisinde halledebilirsiniz.

Şimdi dilerseniz normal yöntemlerle yapılamayacak bir problemi Basic ile çözelim.

Problemimiz şöyle olsun; Calc içerisinde istediğim hücreye, o günün USD, EUR ya da başka bir para biriminin kur bilgisini İnternet'ten alıp yazdırmaya çalışalım. Burada anlatacaklarım sakın kafanızı karıştırmasın. İlk ders için çok karmaşık gelebilecek bir örnek, ancak anlatmaya çalıştığım konu Basic ile neler yapılabilir onu göstermek olduğundan uygun bir örnek. Siz sadece makronun nasıl bir şey olduğuna bakın. Yazı dizimizin ilerleyen derslerinde zaten tüm detaylarıyla benzer makrolar anlatılacak ve komut bilgileri verilecektir.

Peki, bu makroyu yazabilmek için nelere ihtiyacımız olacak? Tabi ki günün tarihine, ana para birimine, kur bilgisini alabilmemiz için döviz cinsine, çeviri yapılacak para miktarına ve İnternet'te hangi siteden bu bilgileri alacağımız bilgilerine ihtiyacımız olacaktır. O halde yazacağımız Basic makrosunu bir fonksiyon olarak tanımlayıp, o fonksiyona bu bilgileri birer parametre olarak vermemiz gerekmektedir. Sonrasında istediğimiz herhangi bir hücre içerisine tıpkı normal Calc fonksiyonlarında olduğu gibi =FONKSİYON ADI ( PARAMETRELER ) şeklinde kullanabiliriz.

Problemimizi çözen makromuz şöyle olacaktır;

Function DOVIZKURUNUAL( Tarih As Date, ByVal HedefBirim As String, Kur As Byte, AnaPara As Double ) As Double

	On Error Goto Hata
	
	Dim BankaWebAdresi
	Dim Dosya
	Dim Satir As String
	Dim Sonuc As Double
	Dim BaslangicTarihi As Date
	Dim BitisTarihi As Date

	HedefBirim = UCase(HedefBirim)

	BaslangicTarihi = "16/04/1996"
	BitisTarihi = Date

	If (Tarih < BaslangicTarihi) Then
	  Beep
	  MsgBox "=DOVIZKURUNUAL( Tarih ; HedefParaBirimi ; KurTuru ; ParaMiktarı )" & Chr(10) & Chr(13) & +_
	         "16/04/1996 Tarihinden önceki T.C. Merkez Bankası döviz kurları" & Chr(10) & +_
	         "web sitesine girilmemiştir. Lütfen uygun bir tarih giriniz."
	  Goto Hata
	End If

	If (Tarih > BitisTarihi) Then
	  Beep
	  MsgBox "=DOVIZKURUNUAL( Tarih ; HedefParaBirimi ; KurTuru ; ParaMiktarı )" & Chr(10) & Chr(13) & +_
	         "Girilen Tarih için günlük kur kaydı bulunamadı. Lütfen uygun bir tarih giriniz."
	  Goto Hata
	End If

	If ((HedefBirim <> "USD") And (HedefBirim <> "AUD") And (HedefBirim <> "DKK") And +_
	    (HedefBirim <> "EUR") And (HedefBirim <> "GBP") And (HedefBirim <> "CHF") And +_
	    (HedefBirim <> "SEK") And (HedefBirim <> "CAD") And (HedefBirim <> "KWD") And +_
	    (HedefBirim <> "NOK") And (HedefBirim <> "SAR") And (HedefBirim <> "JPY") And +_
	    (HedefBirim <> "BGL") And (HedefBirim <> "SYP") And (HedefBirim <> "JOD") And +_
	    (HedefBirim <> "ILS") And (HedefBirim <> "RON") And (HedefBirim <> "IRR")) Then
      Beep
	  MsgBox "=DOVIZKURUNUAL( Tarih ; HedefParaBirimi ; KurTuru ; ParaMiktarı )" & Chr(10) & Chr(13) & +_
	         "Hedef Para Birimi Tanınmıyor ve/veya" & Chr(10) & +_
	         "T.C. Merkez Bankasında işlem görmüyor." & Chr(10) & +_
	         "Girilebilecek Para Birimleri aşağıda listelenmiştir." & Chr(10) & +_
	         "USD, AUD, DKK, EUR, GBP, CHF, SEK, CAD, KWD," & Chr(10) & +_
	         "NOK, SAR, JPY, BGL, SYP, JOD, ILS, RON, IRR"
	  Goto Hata
	End If  

	If ((Kur < 1) Or (Kur > 4)) Then
	  Beep
	  MsgBox "=DOVIZKURUNUAL( Tarih ; HedefParaBirimi ; KurTuru ; ParaMiktarı )" & Chr(10) & Chr(13) & +_
	         "Dönüşüm için gerekli olan KUR TÜRÜ bilgisi tanımsız." & Chr(10) & +_
	         "1:Döviz Alış, 2:Döviz Satış, 3:Efektif Alış, 4:Efektif Satış" & Chr(10) & +_
	         "Lütfen KUR TÜRÜ parametresini doğru giriniz."
	  Goto Hata
	End If

	BankaWebAdresi = "http://www.tcmb.gov.tr/kurlar/" & Year(Tarih) & Format(Month(Tarih),"0#") & "/" & Format(Day(Tarih),"0#") & Format(Month(Tarih),"0#") & Year(Tarih) & ".html"

	Dosya = FreeFile()
	Open BankaWebAdresi For Input As Dosya
	
	While Not Eof(Dosya)
		Line Input #Dosya, Satir
		If Left(Satir,3) = HedefBirim Then
		  If (Tarih < CDate("28/01/2002")) Then
  		    Sonuc = AnaPara / Val(Mid(Satir, 17 + Kur * 10, 10))
  		  ElseIf (Tarih >= CDate("28/01/2002")) Then
  		    Sonuc = AnaPara / Val(Mid(Satir, 17 + Kur * 16, 16))
  		  EndIf  
		  Close #Dosya
		  DOVIZKURUNUAL() = Sonuc
		  Exit Function
		EndIf
	Wend

	Close #Dosya

Hata:

	DOVIZKURUNUAL() = 0.0
		
End Function


OpenOffice.org Calc programında herhangi bir hücreye aşağıdaki şekilde formülü girdiğinizde;

=DOVIZKURUNUAL(Tarih;ParaBirimi;Kur;ParaMiktarı)

Calc sizin adınıza T.C. Merkez Bankası Web Sayfasına giderek vermiş olduğunuz Tarih'teki ilgili ParaBirimi'nin karşılığı olan Kur'u alıp, yine sizin vermiş olduğunuz ParaMiktarı'na bölerek, hesaplamaları yapar ve size sonucu verir.

Gelecek dersimizden itibaren Basic komutları ve OpenOffice.org bileşenlerindeki farklı kullanımlarına değinilecektir.


--Hakan HAMURCU 00:38, 29 Temmuz 2010 (MSD)