Başlangıç > Forms, Oracle, PL/SQL > oracle forms da ole ile excel oluşturma

oracle forms da ole ile excel oluşturma


Merhaba
Oracle Forms ile hazırladığımız ekranlarda çoğu zaman Excel çıktısı almamız gerekir ve bu işlemi faklı yöntemler ile yapabiliriz.Bu yazımızda Excel çıktısı almak için Oracle Forms içinde bulunan ole2 ole objesini kullanarak Excel çıktısı hazırlayacağız. Öncelikle bu işlemi yapabilmek ve kontrolün takibini sağlamak için Excel oluşturma işlemlerini parça parça olarak prosedür halinde hazırlayıp kullanalım.
İlk olarak istediğimiz verileri Excel’e aktaracak olan prosedürümüzü yazalım.

PROCEDURE excel_aktar(worksheet IN ole2.obj_type,
                      satir     IN NUMBER,
                      sutun     IN VARCHAR2,
                      format    IN VARCHAR2,
                      deger     IN VARCHAR2) IS

  args ole2.list_type;
  cell ole2.obj_type;
BEGIN
  args := ole2.create_arglist;
  ole2.add_arg(args, satir);
  ole2.add_arg(args, sutun);
  cell := ole2.get_obj_property(worksheet, 'Cells', args);
  ole2.destroy_arglist(args);
  ole2.set_property(cell, 'NumberFormat', format);
  ole2.set_property(cell, 'Value', deger);
  ole2.release_obj(cell);
END;

Ana prosedürümüz hazır olduğuna göre artık Excel içinde istediğimiz değişiklikleri yapmamıza olanak verecek olan satır ve sütun kontrollerini yapacağımız prosedürlerimizi hazırlayalım.
İlk olarak satır kontrolümüzü yapacağımız prosedürü hazırlayalım.

PROCEDURE excel_satir(worksheet IN ole2.obj_type,
                      sutun     IN VARCHAR2,
                      satir     IN VARCHAR2,
                      tip       VARCHAR2) IS

  args    ole2.list_type;
  cell    ole2.obj_type;
  font    ole2.obj_type;
  borders ole2.obj_type;

  xlcontinuous    CONSTANT NUMBER(5) := 1;
  xldash          CONSTANT NUMBER(5) := -4115;
  xldashdot       CONSTANT NUMBER(5) := 4;
  xldashdotdot    CONSTANT NUMBER(5) := 5;
  xldot           CONSTANT NUMBER(5) := -4118;
  xldouble        CONSTANT NUMBER(5) := -4119;
  xllinestylenone CONSTANT NUMBER(5) := -4142;
  xlslantdashdot  CONSTANT NUMBER(5) := 13;

  xlhairline CONSTANT NUMBER(5) := 1;
  xlthin     CONSTANT NUMBER(5) := 2;
  xlmedium   CONSTANT NUMBER(5) := -4138;
  xlthick    CONSTANT NUMBER(5) := 4;

  xldiagonaldown     CONSTANT NUMBER(5) := 5;
  xldiagonalup       CONSTANT NUMBER(5) := 6;
  xledgebottom       CONSTANT NUMBER(5) := 9;
  xledgeleft         CONSTANT NUMBER(5) := 7;
  xledgeright        CONSTANT NUMBER(5) := 10;
  xledgetop          CONSTANT NUMBER(5) := 8;
  xlinsidehorizontal CONSTANT NUMBER(5) := 12;
  xlinsidevertical   CONSTANT NUMBER(5) := 11;
BEGIN
  args := ole2.create_arglist;
  ole2.add_arg(args, satir);
  ole2.add_arg(args, sutun);
  cell := ole2.get_obj_property(worksheet, 'Cells', args);
  ole2.destroy_arglist(args);
  IF tip = 'BORDER' THEN
    args := ole2.create_arglist;
    ole2.add_arg(args, xledgetop);
    borders := ole2.get_obj_property(cell, 'Borders', args);
    ole2.destroy_arglist(args);
    ole2.set_property(borders, 'OutLine', xlcontinuous);
    ole2.set_property(borders, 'Weight', xlthin);
    ole2.set_property(borders, 'ColorIndex', 0);
    ole2.release_obj(borders);

    args := ole2.create_arglist;
    ole2.add_arg(args, xledgebottom);
    borders := ole2.get_obj_property(cell, 'Borders', args);
    ole2.destroy_arglist(args);
    ole2.set_property(borders, 'OutLine', xlcontinuous);
    ole2.set_property(borders, 'Weight', xlthin);
    ole2.set_property(borders, 'ColorIndex', 0);
    ole2.release_obj(borders);

    args := ole2.create_arglist;
    ole2.add_arg(args, xledgeleft);
    borders := ole2.get_obj_property(cell, 'Borders', args);
    ole2.destroy_arglist(args);
    ole2.set_property(borders, 'OutLine', xlcontinuous);
    ole2.set_property(borders, 'Weight', xlthin);
    ole2.set_property(borders, 'ColorIndex', 0);
    ole2.release_obj(borders);

    args := ole2.create_arglist;
    ole2.add_arg(args, xledgeright);
    borders := ole2.get_obj_property(cell, 'Borders', args);
    ole2.destroy_arglist(args);
    ole2.set_property(borders, 'OutLine', xlcontinuous);
    ole2.set_property(borders, 'Weight', xlthin);
    ole2.set_property(borders, 'ColorIndex', 0);
    ole2.release_obj(borders);
  END IF;
  IF tip = 'WRAP' THEN
    IF satir <> '1' THEN
      ole2.set_property(cell, 'WrapText', 'True');
    END IF;
  END IF;
  ole2.release_obj(cell);
END;

Artık satır kontrol prosedürümüz hazır olduğuna göre şimdi sırada sütun kontrol prosedürümüz var.

PROCEDURE excel_sutun(worksheet IN ole2.obj_type,
                      sutun     IN VARCHAR2,
                      ozellik   IN VARCHAR2,
                      deger     IN VARCHAR2) IS

  args   ole2.list_type;
  column ole2.obj_type;
BEGIN
  args := ole2.create_arglist;
  ole2.add_arg(args, sutun);
  column := ole2.get_obj_property(worksheet, 'Columns', args);
  ole2.destroy_arglist(args);
  ole2.set_property(column, ozellik, deger);
  ole2.release_obj(column);
END;

Bu işlemi de yaptıktan sonra artık Excel üzerinde istediğimiz gibi satır ve sütun kontrolü yapabiliriz. Şimdi sırada Excel içeriğini oluşturmak için kullanacağımız prosedürde. Bu prosedür ile istediğimiz gibi düzenleme ve değişiklik yapılarak Excel içeriği oluşturulabilinir.

PROCEDURE excel_olustur IS

  CURSOR excel_icerik IS
    SELECT table_name, tablespace_name, num_rows, last_analyzed
      FROM dba_tables
     WHERE owner = 'SYS'
       AND num_rows > 0
       AND rownum < 26
     ORDER BY table_name ASC;

  application ole2.obj_type;
  workbook    ole2.obj_type;
  workbooks   ole2.obj_type;
  worksheet   ole2.obj_type;
  worksheets  ole2.obj_type;
  str         NUMBER;

BEGIN
  application := ole2.create_obj('Excel.Application');
  ole2.set_property(application, 'Visible', 'True');

  workbooks := ole2.get_obj_property(application, 'Workbooks');
  workbook  := ole2.invoke_obj(workbooks, 'Add');

  worksheets := ole2.get_obj_property(workbook, 'Worksheets');
  worksheet  := ole2.invoke_obj(worksheets, 'Add');

  str := 1;

  excel_aktar(worksheet, str, 'A', '@', 'Tablo Adı');
  excel_aktar(worksheet, str, 'B', '@', 'Tablespace Adı');
  excel_aktar(worksheet, str, 'C', '@', 'Kayıt Sayısı');
  excel_aktar(worksheet, str, 'D', '@', 'Son Analiz Tarihi');
  excel_aktar(worksheet, str, 'E', '@', 'Açıklama');
  excel_satir(worksheet, 'A', str, 'BORDER');
  excel_satir(worksheet, 'B', str, 'BORDER');
  excel_satir(worksheet, 'C', str, 'BORDER');
  excel_satir(worksheet, 'D', str, 'BORDER');
  excel_satir(worksheet, 'E', str, 'BORDER');
  str := str + 1;
  BEGIN

    FOR xls IN excel_icerik LOOP

      excel_aktar(worksheet, str, 'A', '@', xls.table_name);
      excel_aktar(worksheet, str, 'B', '@', xls.tablespace_name);
      excel_aktar(worksheet, str, 'C', '#.##0,00', round(xls.num_rows, 2));
      excel_aktar(worksheet, str, 'D', '@', to_char(xls.last_analyzed, 'dd/mm/yyyy hh24:mi:ss'));
      excel_aktar(worksheet, str, 'E', '@', 'SYS Owner Bilgisine Sahip ' ||
                   xls.tablespace_name ||
                   ' Tablespace İçindeki ' ||
                   xls.table_name ||
                   ' İsimli Tablo Bilgisi.');
      excel_satir(worksheet, 'A', str, 'BORDER');
      excel_satir(worksheet, 'B', str, 'BORDER');
      excel_satir(worksheet, 'C', str, 'BORDER');
      excel_satir(worksheet, 'D', str, 'BORDER');
      excel_satir(worksheet, 'E', str, 'BORDER');
      excel_sutun(worksheet, 'A:A', 'ColumnWidth', 10);
      excel_sutun(worksheet, 'B:B', 'ColumnWidth', 15);
      excel_sutun(worksheet, 'C:C', 'ColumnWidth', 10);
      excel_sutun(worksheet, 'D:D', 'ColumnWidth', 20);
      excel_sutun(worksheet, 'E:E', 'ColumnWidth', 40);
      str := str + 1;

    END LOOP;

    FOR i IN 1 .. str LOOP

      excel_satir(worksheet, 'A', i, 'WRAP');
      excel_satir(worksheet, 'B', i, 'WRAP');
      excel_satir(worksheet, 'C', i, 'WRAP');
      excel_satir(worksheet, 'D', i, 'WRAP');
      excel_satir(worksheet, 'E', i, 'WRAP');

    END LOOP;

    ole2.release_obj(worksheet);
    ole2.release_obj(worksheets);
    ole2.release_obj(workbook);
    ole2.release_obj(workbooks);
    ole2.release_obj(application);
  EXCEPTION
    WHEN OTHERS THEN
      ole2.release_obj(application);
      message('Hata Oluştu:' || SQLERRM);
  END;
END;

Bütün işlemleri tamamladıktan sonra artık uygulamamız içerisinde hazırladığımız prosedürleri kullanıp Excel çıktısını alabiliriz. Oluşan örnek Excel çıktısı aşağıdaki gibi olacaktır. Artık kodlar üzerinde ihtiyaçlarınıza göre gerekli değişiklik ve düzenleme yaparak istenilen Excel çıktılarını alabilirsiniz.

Kolay gelsin.

Reklamlar
  1. mustafa
    19 Temmuz 2013, 07:46

    Merhaba,ole2 nesnesini sistem tanımıyor.Bunun için bir düzenleme yapmamız gerekiyor mu?

    Beğen

    • 19 Temmuz 2013, 09:25

      Merhaba Mustafa,
      Sistem otomaik olarak ole2 nesnesini tanıyor bir işlem yapman gerekmiyor. Nasıl bir hata alıyorsun ?

      Beğen

  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: