LibreOffice Calc’de Makro Yazma – Başlangıç

LibreOffice, ofis uygulamanızda çeşitli tekrarlayan görevleri otomatikleştirmek için kendi makronuzu yazmanın bir yolunu sunar. Makro geliştirmeniz için Python veya basic kullanabilirsiniz.

Amaç

LibreOffice Calc ilk hücresine, yani 1. satır ve sütun A’nın hücresine ‘Merhaba Dünya’ dizesini koyacak bir makro oluşturacağız.

Makroyu Oluşturmak

  • Uygulamalar => Office => LibreOffice Calc’den LibreOffice Calc’ı açın.
image 40

Menüden seçeneğe gidin: Araçlar ==> Makrolar ==> Makroları Düzenle ==> LibreOffice Basic. Aşağıda ‘LibreOffice temel makroları’ penceresi açılacaktır.

image 41

Makro adı kutusuna istediğiniz adı verin ve Yeni’ye tıklayın. İstediğiniz ismi kullanabilirsiniz. Bu yazı için merhaba_world kullanıldı.

image 42

Yeni düğmesine tıkladığınızda, makro düzenleyici açılacaktır. İşte bu pencerede dikkat edilmesi gereken bazı noktalar. Bu, kodunuzu yazmanız, kodunuzu hata ayıklamanız vb. gereken yerdir. Makronun adının temel makronuzun işlev adı olduğunu görebilirsiniz.

image 43

Şimdi, ilk makroyu kodlamanın zamanı geldi. Type nesnelerinin iki değişkenini tanımlayalım.

dim document as object
dim dispatcher as object

Yukarıdaki değişkenlere iki değer atayalım.

document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Bu Bileşen, geçerli belgeye atıfta bulunur. LibreOffice’te yaptığınız her şey, örneğin yazı, renk, ekleme, bir kontrolör tarafından “izlenir”. Denetleyici daha sonra değişiklikleri belge çerçevesine, yani Calc’ın ana pencere alanına gönderir. Dolayısıyla belge değişkeni, Calc’ın ana alanını ifade eder.

createUnoService, DispatchHelper hizmetinin bir örneğini oluşturur. Bu hizmet, görevleri makrodan çerçeveye göndermemize yardımcı olacaktır. Hemen hemen tüm LibreOffice makro görevleri, dağıtım programı kullanılarak yürütülebilir.

Şimdi bir dizi özellik bildireceğiz. Özellikler her zaman bir ad/değer çiftindedir. Böylece ad, özellik adını içerir ve değer, o özelliğin değerini içerir.

dim args1(0) as new com.sun.star.beans.PropertyValue
dim args2(0) as new com.sun.star.beans.PropertyValue

Amacımız ilk Hücreye ‘Merhaba Dünya’ koymak. İlk A1 hücresini işaret etmek ve bir metin koymak için iki özellik kullanırdık – ‘ToPoint’ ve ‘StringName’.

args1(0).Name = "ToPoint"
args1(0).Value = "$A$1"

args2(0).Name = "StringName"
args2(0).Value = "Hello World!"

Özellikleri ayarladıktan sonra, bunları belgeye göndermek için sevkıyatı aramanın zamanı geldi. Bu nedenle, iki komut kullanarak göndericinin executeDispatch olayını çağırın – a) “.uno:GoToCell” b) “.uno:EnterString”. Bu komutlar, çerçeveye neyin yürütülmesi gerektiğini söyler ve ayrıca tüm özellik dizisini değerlerle birlikte iletir.

Şimdi yürütme tamamlandığında bildirmek için bir mesaj kutusu koyun.

image 44

Makroyu Çalıştır

  • Makroyu çalıştırmanın zamanı geldi. Makroyu çalıştırmak için F5’e basın veya araç çubuğundan Makro Çalıştır’ı tıklayın (yukarıya bakın).
  • Yürütmeden sonra, mesaj kutusu açılır. Geri dönüp Calc elektronik tablosunu kontrol ederseniz, ‘Merhaba Dünya!’ İlk Hücrede yazılır.
image 45
image 46

Kodun Tam Hali

REM  *****  BASIC  *****
sub hello_world

	dim document   as object
	dim dispatcher as object
	
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
	dim args1(0) as new com.sun.star.beans.PropertyValue
	dim args2(0) as new com.sun.star.beans.PropertyValue
	
	args1(0).Name = "ToPoint"
	args1(0).Value = "$A$1"
	dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
	
	args2(0).Name = "StringName"
	args2(0).Value = "Hello World!"
	dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

   msgbox "Completed!"
end sub

Yazının orijinalini buradan okuyabilirsiniz.

Hüseyin GÜÇ

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım. Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum. Son 6 yıldır  sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum. Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.