PROCEDURE write_show_excel IS
 i           number:=1;
 l_string           varchar2(2000);
 application        OLE2.OBJ_TYPE;
 workbooks          OLE2.OBJ_TYPE;
 workbook           OLE2.OBJ_TYPE;
 worksheets         OLE2.OBJ_TYPE;
 cell               OLE2.OBJ_TYPE;
 args               OLE2.LIST_TYPE;
 l_Msg              varchar2(2000);
 l_OldName          varchar2(200) := :FILE_NAME;
begin
  memory.m_row := 0;
  :REPORT_TITLE :='Title';

/*
	:FILE_NAME := Win_Api_Dialog.Save_File('st_report.xls',
	                                        'Save File As',
	                                        Win_Api_Environment.Get_Temp_Directory,
	                                        'Excel files(*.xls)|*.xls|',
	                                        Modal	=> TRUE);	                                        
*/

/*
  :FILE_NAME  := Win_Api_Environment.Get_Temp_Directory||
	                     '\st_report.xls';
*/
  if :FILE_NAME is null then
  	:FILE_NAME := l_OldName;
    return;
  elsif :FILE_NAME = l_OldName then
    memory.m_line :='cmd /c start '||''||:FILE_NAME||''; 
    host(memory.m_line,NO_SCREEN);
    return;
  end if;
  set_application_property(CURSOR_STYLE,'BUSY');
  synchronize;
  application := OLE2.CREATE_OBJ('Excel.Application');
--  OLE2.SET_PROPERTY (application, 'Visible','false');

  workbooks   := OLE2.GET_OBJ_PROPERTY (application, 'Workbooks');

  workbook := OLE2.GET_OBJ_PROPERTY (workbooks,   'Add');

  worksheets  := OLE2.GET_OBJ_PROPERTY (workbook,'Worksheets');

  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, 2);
  memory.m_worksheet := OLE2.GET_OBJ_PROPERTY(workbook, 'Worksheets', args);
  OLE2.DESTROY_ARGLIST (args);
  OLE2.invoke(memory.m_worksheet, 'Delete');
  OLE2.RELEASE_OBJ (memory.m_worksheet);

  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, 2);
  memory.m_worksheet := OLE2.GET_OBJ_PROPERTY(workbook, 'Worksheets', args);
  OLE2.DESTROY_ARGLIST (args);
  OLE2.invoke(memory.m_worksheet, 'Delete');
  OLE2.RELEASE_OBJ (memory.m_worksheet);
  
  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, 1);
  memory.m_worksheet := OLE2.GET_OBJ_PROPERTY(workbook, 'Worksheets', args);
  OLE2.DESTROY_ARGLIST (args);
--  OLE2.SET_PROPERTY(memory.m_worksheet, 'Name',:REPORT_TITLE);
  OLE2.SET_PROPERTY(memory.m_worksheet, 'Name','tratata '||to_char(:REPORT_DATE,'MM YYYY'));

 ---------------
  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, 1);  --  column number
  cell := OLE2.GET_OBJ_PROPERTY (memory.m_worksheet, 'Columns', args);
  OLE2.DESTROY_ARGLIST (args);
  OLE2.SET_PROPERTY (cell, 'NumberFormat', 'mm/yy');
  OLE2.RELEASE_OBJ (cell);

  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, 3);  --  column number
  cell := OLE2.GET_OBJ_PROPERTY (memory.m_worksheet, 'Columns', args);
  OLE2.DESTROY_ARGLIST (args);
  OLE2.SET_PROPERTY (cell, 'NumberFormat', '#,##0.00');
  OLE2.RELEASE_OBJ (cell);

  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, 4);  --  column number
  cell := OLE2.GET_OBJ_PROPERTY (memory.m_worksheet, 'Columns', args);
  OLE2.DESTROY_ARGLIST (args);
  OLE2.SET_PROPERTY (cell, 'NumberFormat', '#,##0');
  OLE2.RELEASE_OBJ (cell);

  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, 5);  --  column number
  cell := OLE2.GET_OBJ_PROPERTY (memory.m_worksheet, 'Columns', args);
  OLE2.DESTROY_ARGLIST (args);
  OLE2.SET_PROPERTY (cell, 'NumberFormat', '#,##0');
  OLE2.RELEASE_OBJ (cell);

  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, 6);  --  column number
  cell := OLE2.GET_OBJ_PROPERTY (memory.m_worksheet, 'Columns', args);
  OLE2.DESTROY_ARGLIST (args);
  OLE2.SET_PROPERTY (cell, 'NumberFormat', '#,##0.00');
  OLE2.RELEASE_OBJ (cell);
  
  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, 1);  --  column number
  cell := OLE2.GET_OBJ_PROPERTY (memory.m_worksheet, 'Columns', args);
  OLE2.DESTROY_ARGLIST (args);
  OLE2.SET_PROPERTY (cell, 'ColumnWidth', 5.29);
  OLE2.RELEASE_OBJ (cell);

  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, 2);  --  column number
  cell := OLE2.GET_OBJ_PROPERTY (memory.m_worksheet, 'Columns', args);
  OLE2.DESTROY_ARGLIST (args);
  OLE2.SET_PROPERTY (cell, 'ColumnWidth', 35);
  OLE2.SET_PROPERTY (cell, 'HorizontalAlignment', -4152); --xlRight
  OLE2.RELEASE_OBJ (cell);

  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, 3);  --  column number
  cell := OLE2.GET_OBJ_PROPERTY (memory.m_worksheet, 'Columns', args);
  OLE2.DESTROY_ARGLIST (args);
  OLE2.SET_PROPERTY (cell, 'ColumnWidth', 14);
  OLE2.RELEASE_OBJ (cell);

  memory.m_row := 3;
  INS_CELL_EXCEL (4, 'Month '||to_char(:REPORT_DATE,'mm/yyyy'),
                          memory.m_worksheet,2);
  memory.m_row := 4;
  INS_CELL_EXCEL (3, :REPORT_TITLE,memory.m_worksheet,1);

  memory.m_row := memory.m_row + 2;
  add_block_record_to_file ('TOTALS','Total');
  memory.m_row := memory.m_row + 2;
 	   -- Save the file and quit excel
 	win_api_utility.delete_file(:FILE_NAME);
  args   := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, :FILE_NAME);
  OLE2.INVOKE  (workbook, 'SaveAs', args);
  OLE2.DESTROY_ARGLIST (args);
  OLE2.INVOKE (application, 'Quit');

  -- Release the OLE objects;
  OLE2.RELEASE_OBJ (cell);
  OLE2.RELEASE_OBJ (memory.m_worksheet);
  OLE2.RELEASE_OBJ (worksheets);
  OLE2.RELEASE_OBJ (workbook);
  OLE2.RELEASE_OBJ (workbooks);
  OLE2.RELEASE_OBJ (application);-- 
  synchronize;

  

  l_string:='cmd /c start '||:FILE_NAME; 
  host(l_string,NO_SCREEN);

  SET_ITEM_PROPERTY('CONTROL.FILE_NAME',VISIBLE, PROPERTY_TRUE);	
  SET_ITEM_PROPERTY('CONTROL.FILE_NAME',ENABLED, PROPERTY_TRUE);	
  set_application_property(CURSOR_STYLE,'DEFAULT');
exception
  when others then
    set_application_property(CURSOR_STYLE,'DEFAULT');
    message(sqlerrm); pause;
    message (l_Msg) ; pause;
END;

-----------------------------------------------
PROCEDURE INS_CELL_EXCEL(V_col  IN  NUMBER,
                         V_TEXT  IN  VARCHAR2,
                         V_SHEET IN  OLE2.OBJ_TYPE,
                         Style   integer := 4,
                         border  integer := 1,
                         format  char    := null) 
IS
  args    ole2.list_type;
  cell    ole2.obj_type;
  obj     ole2.obj_type;
BEGIN
/*
  Style = 1   Heading 1
  Style = 2   Heading 2
  Style = 3   Heading 3
  Style = 4   normal text
  Style = 5   totals
  Style = 6   normal text - errors
  border = 2   normal text - first row of month
  border = 1   normal text - first row of month
*/
  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, memory.m_row);  -- row number
  OLE2.ADD_ARG (args, v_col);  --  column number
  cell := OLE2.GET_OBJ_PROPERTY (v_sheet, 'Cells', args);
  OLE2.DESTROY_ARGLIST (args);
  if format is not null then
    OLE2.SET_PROPERTY (cell, 'NumberFormat', format);
  end if;
  OLE2.SET_PROPERTY (cell, 'Value', v_text);
  if Style in (1,3) then  -- Title
--  Center
    OLE2.SET_PROPERTY (cell, 'HorizontalAlignment', -4108); -- xlCenter
  end if;

  if Style in (4,6,7) then  -- Details
--border
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 7);   -- xlEdgeLeft
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',2);    -- xlThin

    OLE2.RELEASE_OBJ (obj);
    
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 8);   -- xlEdgeTop
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    if border = 2 then  -- 
      OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
      OLE2.SET_PROPERTY (obj, 'Weight',-4138);    -- xlMedium
    else
      OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
      OLE2.SET_PROPERTY (obj, 'Weight',2);    -- xlThin
    end if;

    OLE2.RELEASE_OBJ (obj);
    
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 9);   -- xlEdgeBottom
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',2);    -- xlThin

    OLE2.RELEASE_OBJ (obj);
    
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 10);   -- xlEdgeRight
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',2);    -- xlThin

    OLE2.RELEASE_OBJ (obj);
  elsif Style = 5 then  -- Totals
--border
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 7);   -- xlEdgeLeft
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',-4138);    -- xlMedium

    OLE2.RELEASE_OBJ (obj);
    
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 8);   -- xlEdgeTop
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',-4138);    -- xlMedium

    OLE2.RELEASE_OBJ (obj);
    
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 9);   -- xlEdgeBottom
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',-4138);    -- xlMedium

    OLE2.RELEASE_OBJ (obj);
    
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 10);   -- xlEdgeRight
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',-4138);    -- xlMedium

    OLE2.RELEASE_OBJ (obj);
  end if;
--font
  obj := OLE2.GET_OBJ_PROPERTY (cell, 'Font');
  OLE2.SET_PROPERTY (obj, 'Name','Tahoma');
-- font 
  if Style in (4,5,7) then
    OLE2.SET_PROPERTY (obj, 'Size','10');
    OLE2.SET_PROPERTY (obj, 'ColorIndex',1);
  elsif Style = 6 then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',9);
    OLE2.SET_PROPERTY (obj, 'Bold',1);
    OLE2.SET_PROPERTY (obj, 'Size','10');
  elsif Style = 3 then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',2);
    OLE2.SET_PROPERTY (obj, 'Bold',1);
    OLE2.SET_PROPERTY (obj, 'Size','10');
  elsif Style = 2 then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',11);
    OLE2.SET_PROPERTY (obj, 'Bold',1);
    OLE2.SET_PROPERTY (obj, 'Size','12');
  else
    OLE2.SET_PROPERTY (obj, 'ColorIndex',1);
    OLE2.SET_PROPERTY (obj, 'Bold',1);
    OLE2.SET_PROPERTY (obj, 'Size','14');
 end if;

    OLE2.RELEASE_OBJ (obj);
    
-- background color
  obj := OLE2.GET_OBJ_PROPERTY (cell, 'Interior');
  if Style in (4,7)  then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',37);
  elsif Style = 5  then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',34);
  elsif Style = 6  then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',15);
  elsif Style = 3 then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',11);
  elsif Style = 2 then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',2);
  else
    OLE2.SET_PROPERTY (obj, 'ColorIndex',2);
  end if;
  OLE2.SET_PROPERTY (obj, 'Pattern','xlSolid');
  
  OLE2.RELEASE_OBJ (obj);
  OLE2.RELEASE_OBJ (cell);
END;

-----------------------------------------------
PACKAGE memory IS
  m_worksheet    OLE2.OBJ_TYPE;
  m_row          integer;
END;

-----------------------------------------------


PROCEDURE add_block_record_to_file (p_BlockName varchar2,
                                    p_Title varchar2) IS
  s3    number := 0;
  s4    number := 0;
  s5    number := 0;
  s6    number := 0;
  l_style integer ;
  l_TopBorder integer;
  l_PrevValue varchar2(200);
BEGIN
  go_block(p_BlockName);  
  FIRST_RECORD;
  if name_in(p_BlockName||'.REPORT_MONTH') is not null then
    l_PrevValue := name_in(p_BlockName||'.REPORT_MONTH');
  else
    l_PrevValue := name_in(p_BlockName||'.STATUS_DESC');
  end if;
  if :system.record_status != 'NEW' then  	
    INS_CELL_EXCEL (1, p_Title, memory.m_worksheet,2);
    memory.m_row := memory.m_row + 2;
    INS_CELL_EXCEL (1, 'Date', memory.m_worksheet,3);
    INS_CELL_EXCEL (2, 'Status',   memory.m_worksheet,3);
    INS_CELL_EXCEL (3, 'Sum',   memory.m_worksheet,3);
    INS_CELL_EXCEL (4, 't1',      memory.m_worksheet,3);
    INS_CELL_EXCEL (5, 't2',      memory.m_worksheet,3);
    end if;
    memory.m_row := memory.m_row + 1;
    LOOP
    	memory.m_line := null;
    	if name_in(p_BlockName||'.REPORT_MONTH') is not null then
    	  if l_PrevValue != name_in(p_BlockName||'.REPORT_MONTH') then
          l_PrevValue := name_in(p_BlockName||'.REPORT_MONTH');
    		  l_TopBorder := 2;
    	  else
    		  l_TopBorder := 1;
    	  end if;
      else
    	  if l_PrevValue != name_in(p_BlockName||'.STATUS_DESC') then
          l_PrevValue := name_in(p_BlockName||'.STATUS_DESC');
    		  l_TopBorder := 2;
    	  else
    		  l_TopBorder := 1;
    	  end if;
    	end if;
      INS_CELL_EXCEL (1,
              to_char(to_date(name_in(p_BlockName||'.REPORT_MONTH'),'mm/rr'),'mm/yyyy'),
              memory.m_worksheet,4,l_TopBorder);
        
      if name_in(p_BlockName||'.ERROR_NO') > 0 or 
      	 name_in(p_BlockName||'.ERROR_NO') = -1 then
      	l_style := 6;
      else
      	l_style := 4;
      end if;
      INS_CELL_EXCEL (2, name_in(p_BlockName||'.STATUS_DESC'),
                       memory.m_worksheet,l_style,l_TopBorder);
      INS_CELL_EXCEL (3, name_in(p_BlockName||'.COST'),
                       memory.m_worksheet,l_style,l_TopBorder);
      if p_BlockName not in ('CRED','DEB') then
        INS_CELL_EXCEL (4, name_in(p_BlockName||'.MINUTES'),
                       memory.m_worksheet,l_style,l_TopBorder);
        INS_CELL_EXCEL (5, name_in(p_BlockName||'.CALL_COUNT'),
                       memory.m_worksheet,l_style,l_TopBorder);
        if p_BlockName in ('TOTALS','IDD','TOTAL_MONTH') then
          INS_CELL_EXCEL (6,  name_in(p_BlockName||'.DISCOUNT'),memory.m_worksheet,l_style,l_TopBorder);
        end if;
      end if;
      s3 := s3 + name_in(p_BlockName||'.COST');
      s4 := s4 + name_in(p_BlockName||'.MINUTES');
      s5 := s5 + name_in(p_BlockName||'.CALL_COUNT');
      s6 := s6 + name_in(p_BlockName||'.DISCOUNT');      
      memory.m_row := memory.m_row + 1;
      exit when :SYSTEM.LAST_RECORD = 'TRUE';
      NEXT_RECORD;
    END LOOP;
    INS_CELL_EXCEL (3, s3,memory.m_worksheet,5);
    INS_CELL_EXCEL (4, s4,memory.m_worksheet,5);
    INS_CELL_EXCEL (5, s5,memory.m_worksheet,5);
    memory.m_row := memory.m_row + 3;
  end if;

END;

-------------------------------------------------------------------------


PROCEDURE INS_CELL_EXCEL(V_col  IN  NUMBER,
                         V_TEXT  IN  VARCHAR2,
                         V_SHEET IN  OLE2.OBJ_TYPE,
                         Style   integer := 4,
                         border  integer := 1) 
IS
  args    ole2.list_type;
  cell    ole2.obj_type;
  obj     ole2.obj_type;
BEGIN
/*
  Style = 1   Heading 1
  Style = 2   Heading 2
  Style = 3   Heading 3
  Style = 4   normal text
  Style = 5   totals
  Style = 6   normal text - errors
  border = 2   normal text - first row of month
  border = 1   normal text - first row of month
*/
  args := OLE2.CREATE_ARGLIST;
  OLE2.ADD_ARG (args, memory.m_row);  -- row number
  OLE2.ADD_ARG (args, v_col);  --  column number
  cell := OLE2.GET_OBJ_PROPERTY (v_sheet, 'Cells', args);
  OLE2.DESTROY_ARGLIST (args);
  OLE2.SET_PROPERTY (cell, 'Value', v_text);
  if Style in (1,3) then  -- Title
--  Center
    OLE2.SET_PROPERTY (cell, 'HorizontalAlignment', -4108); -- xlCenter
  end if;

  if Style in (4,6,7) then  -- Details
--border
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 7);   -- xlEdgeLeft
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',2);    -- xlThin

    OLE2.RELEASE_OBJ (obj);
    
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 8);   -- xlEdgeTop
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    if border = 2 then  -- 
      OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
      OLE2.SET_PROPERTY (obj, 'Weight',-4138);    -- xlMedium
    else
      OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
      OLE2.SET_PROPERTY (obj, 'Weight',2);    -- xlThin
    end if;

    OLE2.RELEASE_OBJ (obj);
    
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 9);   -- xlEdgeBottom
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',2);    -- xlThin

    OLE2.RELEASE_OBJ (obj);
    
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 10);   -- xlEdgeRight
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',2);    -- xlThin

    OLE2.RELEASE_OBJ (obj);
  elsif Style = 5 then  -- Totals
--border
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 7);   -- xlEdgeLeft
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',-4138);    -- xlMedium

    OLE2.RELEASE_OBJ (obj);
    
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 8);   -- xlEdgeTop
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',-4138);    -- xlMedium

    OLE2.RELEASE_OBJ (obj);
    
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 9);   -- xlEdgeBottom
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',-4138);    -- xlMedium

    OLE2.RELEASE_OBJ (obj);
    
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (args, 10);   -- xlEdgeRight
    obj := OLE2.GET_OBJ_PROPERTY (cell, 'Borders', args);
    OLE2.DESTROY_ARGLIST (args);

    OLE2.SET_PROPERTY (obj, 'LineStyle',1); -- xlContinuous
    OLE2.SET_PROPERTY (obj, 'Weight',-4138);    -- xlMedium

    OLE2.RELEASE_OBJ (obj);
  end if;
--font
  obj := OLE2.GET_OBJ_PROPERTY (cell, 'Font');
  OLE2.SET_PROPERTY (obj, 'Name','Tahoma');
-- font 
  if Style in (4,5,7) then
    OLE2.SET_PROPERTY (obj, 'Size','10');
    OLE2.SET_PROPERTY (obj, 'ColorIndex',1);
  elsif Style = 6 then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',9);
    OLE2.SET_PROPERTY (obj, 'Bold',1);
    OLE2.SET_PROPERTY (obj, 'Size','10');
  elsif Style = 3 then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',6);
    OLE2.SET_PROPERTY (obj, 'Bold',1);
    OLE2.SET_PROPERTY (obj, 'Size','10');
  elsif Style = 2 then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',11);
    OLE2.SET_PROPERTY (obj, 'Bold',1);
    OLE2.SET_PROPERTY (obj, 'Size','12');
  else
    OLE2.SET_PROPERTY (obj, 'ColorIndex',1);
    OLE2.SET_PROPERTY (obj, 'Bold',1);
    OLE2.SET_PROPERTY (obj, 'Size','14');
 end if;

    OLE2.RELEASE_OBJ (obj);
    
-- background color
  obj := OLE2.GET_OBJ_PROPERTY (cell, 'Interior');
  if Style in (4,7)  then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',37);
  elsif Style = 5  then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',34);
  elsif Style = 6  then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',15);
  elsif Style = 3 then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',11);
  elsif Style = 2 then
    OLE2.SET_PROPERTY (obj, 'ColorIndex',2);
  else
    OLE2.SET_PROPERTY (obj, 'ColorIndex',2);
  end if;
  OLE2.SET_PROPERTY (obj, 'Pattern','xlSolid');
  
  OLE2.RELEASE_OBJ (obj);
  OLE2.RELEASE_OBJ (cell);
END;

