sap abap ile ole nesnesi kullanılarak gelişmiş excel dosyası oluşturma (creating an advanced excel file with abap ole object)

abap ile gelişmiş seviyede bir excel dosyası oluşturmak istiyorsak abap ole nesnesini kullanırız. ole nesnesi kullanarak excel dosyasındaki her hücreyi tek tek biçimlendirebiliriz. istersek yazı tipini değiştirebiliriz, istersek hücreyi renklendirebiliriz, istersek hücre genişliğini ayarlayabiliriz hatta bir hücreye formül bile atayabiliriz. mesela aşağıdaki örnekte kod yardımıyla 3 adet malzeme oluşturdum ve bunların fiyatlarının toplamını satırların bitişine formül ile yazdırdım. bazı hücreleri koyu yaparken bazılarının arka plan renklerini değiştirdim.

REPORT  zexcel_ole.
 
INCLUDE ole2incl.
 
DATA: gv_filename TYPE string,
      gv_path TYPE string,
      gv_fullpath TYPE string.
 
DATA: e_activesheet TYPE ole2_object,
      e_appl TYPE ole2_object,
      e_work TYPE ole2_object,
      e_cell TYPE ole2_object,
      e_color TYPE ole2_object,
      e_bold TYPE ole2_object.
 
DATA: gv_ln TYPE i,
      gv_val TYPE string.
 
DATA: BEGIN OF gt_data OCCURS 0,
        matnr TYPE matnr,
        netwr TYPE netwr,
        waers TYPE waers,
      END OF gt_data.
 
START-OF-SELECTION.
 
  gt_data-matnr = 'Malzeme1'.
  gt_data-netwr = '123.11'.
  gt_data-waers = 'TRY'.
  APPEND gt_data.
  gt_data-matnr = 'Malzeme2'.
  gt_data-netwr = '1243.51'.
  gt_data-waers = 'TRY'.
  APPEND gt_data.
  gt_data-matnr = 'Malzeme3'.
  gt_data-netwr = '99.18'.
  gt_data-waers = 'TRY'.
  APPEND gt_data.
 
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title      = 'Select file'
      default_extension = 'xls'
      file_filter       = '*.xls'
    CHANGING
      filename          = gv_filename
      path              = gv_path
      fullpath          = gv_fullpath.
 
  IF sy-subrc EQ 0.
 
    CREATE OBJECT e_appl 'EXCEL.APPLICATION'.
    SET PROPERTY OF e_appl 'VISIBLE' = 1.
 
    CALL METHOD OF
        e_appl
        'WORKBOOKS' = e_work.
    CALL METHOD OF
        e_work
        'Add'  = e_work.
 
    GET PROPERTY OF e_appl 'ActiveSheet' = e_activesheet.
    SET PROPERTY OF e_activesheet 'Name' = 'Sheet 1'.
 
    PERFORM set_cell USING 1 1 'Malzeme Listesi' 20 1 0.
    PERFORM set_cell USING 3 1 'Malzeme No' 50 1 12.
    PERFORM set_cell USING 3 2 'Fiyat' 50 1 0.
    PERFORM set_cell USING 3 3 'Para Birimi' 50 1 0.
 
    LOOP AT gt_data.
      gv_ln = sy-tabix + 3.
      gv_val = gt_data-matnr.
      PERFORM set_cell USING gv_ln 1 gv_val 0 0 0.
      gv_val = gt_data-netwr.
      PERFORM set_cell USING gv_ln 2 gv_val 0 0 0.
      gv_val = gt_data-waers.
      PERFORM set_cell USING gv_ln 3 gv_val 0 0 0.
    ENDLOOP.
 
    gv_ln = gv_ln + 1.
    PERFORM set_cell USING gv_ln 1 'Toplam' 0 1 0.
    gv_val = gv_ln - 1.
    CONDENSE gv_val.
    CONCATENATE '=SUM(B4:B' gv_val ')' INTO gv_val.
    PERFORM set_cell USING gv_ln 2 gv_val 0 0 0.
 
    CALL METHOD OF
        e_work
        'SAVEAS'
 
      EXPORTING
        #1       = gv_fullpath.
 
    CALL METHOD OF
        e_work
        'close'.
    CALL METHOD OF
        e_appl
        'QUIT'.
    FREE OBJECT e_appl.
  ENDIF.
 
*&---------------------------------------------------------------------*
*&      Form  set_cell
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ROW      text
*      -->P_COLUMN   text
*      -->P_VAL      text
*      -->P_INT      text
*      -->P_BOLD     text
*      -->P_WIDTH    text
*----------------------------------------------------------------------*
FORM set_cell  USING p_row TYPE sy-tabix
                     p_column TYPE sy-tabix
                     p_val TYPE string
                     p_int TYPE i
                     p_bold TYPE i
                     p_width TYPE i.
 
  CALL METHOD OF
      e_appl
      'Cells' = e_cell
    EXPORTING
      #1      = p_row
      #2      = p_column.
  SET PROPERTY OF e_cell 'Value' =  p_val.
  GET PROPERTY OF e_cell 'Interior' = e_color.
  SET PROPERTY OF e_color 'ColorIndex' = p_int.
 
  GET PROPERTY OF e_cell 'Font' = e_bold.
  SET PROPERTY OF e_bold 'Bold' = p_bold.
  IF p_width > 0.
    SET PROPERTY OF e_cell 'ColumnWidth' = p_width.
  ENDIF.
 
ENDFORM.                    " SET_CELL