Excel Download Package in Apex

Step 1:
Create
below Package in DB.
Package Spec
create or replace PACKAGE doy_PK_APEX_EXCEL_DOWNLOAD
IS
   
TYPE query_res IS REF CURSOR;

   PROCEDURE excel_initialize;

   PROCEDURE print_headings;

   PROCEDURE set_sql (
      p_session_id 
 
IN     
 
NUMBER,
      p_app_id 
     
IN 
     
NUMBER,
      p_page_id 
    
IN 
     
NUMBER,
      p_tot_rows 
   
IN   
   
NUMBER,
      p_sql 
        
OUT 
    
query_res,
      p_tot_sql 
    
OUT 
    
query_res
   )
;

   PROCEDURE print_data (
      p_session_id 
 
IN   NUMBER,
      p_app_id 
     
IN 
 
NUMBER,
      p_page_id 
    
IN 
 
NUMBER
   )
;

   l_session_id 
     
NUMBER;
   l_ir_id 
          
NUMBER;
   l_report_id 
      
NUMBER;
   l_app_id 
         
NUMBER;
   l_page_id 
        
NUMBER;
   l_user_id 
        
VARCHAR2 (10);
   l_location 
       
VARCHAR2 (100);
   l_month 
          
VARCHAR2 (100);
   l_schtype 
        
VARCHAR2 (100);
   l_scheme 
         
VARCHAR2 (100);
   l_distributor 
    
VARCHAR2 (100);
   l_invsegment 
     
VARCHAR2 (100);
   l_base_report_id 
 
NUMBER;

   PROCEDURE get_excel (
      p_session_id 
    
IN 
 
NUMBER,
      p_app_id 
        
IN 
 
NUMBER,
      p_page_id 
       
IN 
 
NUMBER,
      p_static 
        
IN 
 
VARCHAR2,
      p_user_id 
       
IN 
 
VARCHAR2,
      p_report_output 
 
IN   CLOB
   )
;

   gv_session_id 
    
NUMBER;
   gv_company_code 
  
VARCHAR2 (100);
   gv_static 
        
VARCHAR2 (1);
   gv_user_id 
       
VARCHAR2 (32000);
   l_dealer_code 
    
VARCHAR2 (15);
   l_ta_scheme 
      
VARCHAR2 (100);
   g_report_output 
  
CLOB;
   g_report_header 
  
CLOB;
   g_report_header2 
 
CLOB;
   g_report_header3 
 
CLOB;
   g_report_header4 
 
CLOB;
   g_report_header5 
 
CLOB;
   g_report_header6 
 
CLOB;
   g_file_name 
      
VARCHAR2 (2000);
   g_report_footer1 
 
CLOB ;
   g_report_footer2 
 
CLOB ;
   g_report_footer3 
 
CLOB ;

   PROCEDURE close_excel;

   PROCEDURE ds_get_excel (
      p_session_id 
     
IN 
 
NUMBER,
      p_app_id 
         
IN 
 
NUMBER,
      p_page_id 
        
IN 
 
NUMBER,
      p_static 
         
IN 
 
VARCHAR2,
      p_user_id 
        
IN 
 
VARCHAR2,
      p_report_output 
  
IN   CLOB,
      p_report_header 
  
IN   CLOB,
      p_report_header2 
      
CLOB,
      p_report_header3 
      
CLOB,
      p_report_header4 
      
CLOB,
      p_report_header5 
      
CLOB,
      p_report_header6 
      
CLOB,
      p_file_name 
           
VARCHAR2,
      p_report_footer1 
      
CLOB default null,
      p_report_footer2 
      
CLOB default null,
      p_report_footer3 
      
CLOB default null
   )
;

   PROCEDURE ps_ds_get_excel_new (
      p_session_id 
     
IN 
 
NUMBER,
      p_app_id 
         
IN 
 
NUMBER,
      p_page_id 
        
IN 
 
NUMBER,
      p_static 
         
IN 
 
VARCHAR2,
      p_user_id 
        
IN 
 
VARCHAR2,
      p_report_output 
  
IN   CLOB,
      p_report_header 
  
IN   CLOB,
      p_report_header2 
      
CLOB,
      p_report_header3 
      
CLOB,
      p_report_header4 
      
CLOB,
      p_report_header5 
      
CLOB,
      p_report_header6 
      
CLOB,
      p_file_name 
           
VARCHAR2,
      p_report_footer1 
      
CLOB DEFAULT NULL,
      p_report_footer2 
      
CLOB DEFAULT NULL,
      p_report_footer3 
      
CLOB DEFAULT NULL
   )
;
END doy_pk_apex_excel_download;?

Package Body
create or replace PACKAGE BODY         doy_pk_apex_excel_download
IS
   
PROCEDURE excel_initialize
   
IS
      p_user_id 
    
VARCHAR2 (200) := gv_user_id;
      p_session_id 
 
NUMBER   
     
:= gv_session_id;
   
BEGIN
      OWA_UTIL.mime_header (
‘application/octet’, FALSE);
      HTP.p 
 
‘Content-Disposition:
attachment; filename=’

             
|| g_file_name
             
|| ‘.xls’
            )
;
—      HTP.p
(‘Content-type: application/vnd.ms-excel;’);

      HTP.p (
‘Pragma: cache’);
      HTP.p (
‘Expires: 0’);
      OWA_UTIL.http_header_close
;
   
END;

   PROCEDURE print_headings
   
IS
      p_cols 
            wwv_flow_global.vc_arr2
;
      p_columns 
         
VARCHAR2 (4000);
      p_report_label 
    
VARCHAR2 (4000);
      p_disp_condition 
  
VARCHAR2 (2000);
      p_disp_condition2 
 
VARCHAR2 (2000);
      p_title 
           
VARCHAR2 (2000);

      CURSOR get_cols
      
IS
         
SELECT   column_alias, report_label
             
FROM apex_application_page_ir_col
            
WHERE application_id = l_app_id AND page_id = l_page_id
         
ORDER BY display_order;

      CURSOR col_disp_yn (p_col_name VARCHAR2)
      
IS
         
SELECT display_condition, display_condition2
           
FROM apex_application_page_ir_col
          
WHERE application_id = l_app_id
            
AND page_id = l_page_id
            
AND display_condition IS NOT NULL
            
AND UPPER (column_alias) = UPPER (p_col_name);

      l_increment 
       
NUMBER 
                
:= 0;
   
BEGIN
      HTP.p
         (
‘<table
border=1 style=”background-color:yellow foreground-color:white “>’

         )
;
      HTP.p (
‘<tr>’);

      IF get_cols%ISOPEN
      
THEN
         
CLOSE get_cols;
      
END IF;

      FOR get_cols1 IN get_cols
      
LOOP
         p_columns 
:= p_columns || ‘:’ || get_cols1.report_label;
      
END LOOP;

      p_columns := SUBSTR (p_columns, 2);
      p_cols 
:= apex_util.string_to_table (p_columns);

      FOR i IN p_cols.FIRST .. p_cols.LAST
      
LOOP
         l_increment 
:= l_increment + 1;
           
/************for hiding conditionally hidden columns start **********
         
IF col_disp_yn%ISOPEN THEN
            
CLOSE col_disp_yn;
         
END IF;
            
OPEN col_disp_yn(p_cols(l_increment));
            
FETCH col_disp_yn INTO p_disp_condition,p_disp_condition2;
            
CLOSE col_disp_yn;
             
if p_disp_condition is not null THEN
               
 
if   p_disp_condition2 <> l_location THEN
               
         
l_increment 
:= l_increment + 1;
               
 
end if;

             end if;
            
/************for hiding conditionally hidden columns end **********/

         –dbms_output.put_line(t_cols(i));
         HTP.p
            (   
‘<td
><font
style=”color:blue;width:50px;font-weight:800″  >’

             
|| ‘EMPLOYEE ID’
             
|| ‘</font></td>’
            )
;
         p_disp_condition 
:= NULL;
      
END LOOP;

      l_increment := 0;
      HTP.p (
‘</tr>’);
      HTP.p (
‘</table>’);
   
END;

   PROCEDURE set_sql (
      p_session_id 
 
IN     
 
NUMBER,
      p_app_id 
     
IN 
     
NUMBER,
      p_page_id 
    
IN 
     
NUMBER,
      p_tot_rows 
   
IN   
   
NUMBER,
      p_sql 
        
OUT 
    
query_res,
      p_tot_sql 
    
OUT 
    
query_res
   )
   
IS
      
CURSOR get_ir_id
      
IS
         
SELECT interactive_report_id, report_id
           
FROM apex_application_page_ir_rpt
          
WHERE session_id = p_session_id
            
AND page_id = p_page_id
            
AND base_report_id = NVL (l_base_report_id, base_report_id);

      l_ir_id 
            
NUMBER;
      l_report_id 
        
NUMBER;
      p_cols 
             wwv_flow_global.vc_arr2
;
      p_tot_cols 
         wwv_flow_global.vc_arr2
;
      p_columns 
          
VARCHAR2 (4000);
      p_columns1 
         
VARCHAR2 (4000);
      p_report_label 
     
VARCHAR2 (4000);
      p_format_mask 
      
VARCHAR2 (1000);
      p_max 
              
NUMBER;
      lv_v_slno 
          
VARCHAR2 (32767);
      p_title 
            
VARCHAR2 (50);

      CURSOR get_title
      
IS
         
SELECT SUBSTR (region_name, 1, 50)
           
FROM apex_application_page_regions
          
WHERE application_id = l_app_id
            
AND page_id = l_page_id
            
AND source_type = ‘Interactive Report’;

      CURSOR get_cols
      
IS
         
SELECT report_columns
           
FROM apex_application_page_ir_rpt
          
WHERE application_id = p_app_id
            
AND page_id = p_page_id
            
AND session_id = p_session_id
            
AND interactive_report_id = l_ir_id
            
AND report_id = l_report_id;

      CURSOR get_format_mask (p_column VARCHAR2)
      
IS
         
SELECT column_alias, report_label, format_mask
           
FROM apex_application_page_ir_col
          
WHERE application_id = p_app_id
            
AND page_id = p_page_id
            
AND interactive_report_id = l_ir_id
            
AND column_alias = p_column
            
/* for hiding ALL columns */
            
AND display_order NOT BETWEEN 3
               
                   
  
AND (SELECT MIN (display_order)  1
               
                     
       
FROM apex_application_page_ir_col
               
                     
      
WHERE application_id = p_app_id
               
                     
        
AND page_id = p_page_id);

      p_set_query 
        
VARCHAR2 (18000);
      p_set_tot_query 
    
VARCHAR2 (18000);

      CURSOR get_query (c_ir_id NUMBER)
      
IS
         
SELECT sql_query
           
FROM apex_application_page_ir
          
WHERE interactive_report_id = c_ir_id AND page_id = p_page_id;

      CURSOR get_conditions (c_ir_id NUMBER, c_report_id NUMBER)
      
IS
         
SELECT REPLACE
               
   
(
REPLACE (condition_sql,
               
             
‘#APXWS_EXPR#’,
               
             
CONCAT (CONCAT (””, condition_expression),
               
                     
””)
               
            
)
,
               
    
‘#APXWS_EXPR2#’,
               
    
CONCAT (CONCAT (””, condition_expression2), ””)
               
   
) sql_condition
           
FROM apex_application_page_ir_cond
          
WHERE interactive_report_id = c_ir_id
            
AND application_id = p_app_id
            
AND report_id = c_report_id
            
AND page_id = p_page_id
            
AND condition_enabled = ‘Yes’
            
AND condition_type = ‘Filter’;

      l_sql_query 
        
VARCHAR2 (32000);
      l_tot_sql_query 
    
VARCHAR2 (32000);         
                     
 

      l_report_query 
     
VARCHAR2 (32000);
      l_tot_report_query 
 
VARCHAR2 (32000);         
                     
 

      l_query_conditions 
 
VARCHAR2 (24000);
      l_sql_condition 
    
VARCHAR2 (24000);
      l_conditions_exist 
 
VARCHAR2 (1)         
  
:= ‘N’;
      v_title 
            
VARCHAR2 (4000);
   
BEGIN
      
IF get_ir_id%ISOPEN
      
THEN
         
CLOSE get_ir_id;
      
END IF;

      OPEN get_ir_id;

      FETCH get_ir_id
       
INTO l_ir_id, l_report_id;

      CLOSE get_ir_id;

/****************************/
      
IF get_cols%ISOPEN
      
THEN
         
CLOSE get_cols;
      
END IF;

      OPEN get_cols;

      FETCH get_cols
       
INTO p_columns;

      CLOSE get_cols;

      p_cols := apex_util.string_to_table (p_columns);
      p_tot_cols 
:= apex_util.string_to_table (p_columns);
      p_max 
:= p_cols.LAST;
      p_set_query 
:= ”” || ‘<td>’ || ”’||’;
      p_set_tot_query 
:= ”” || ‘<td>’ || ”’||’
                     
   

       
/*******************displaying title row  start */
      
— IF p_tot_rows > 0.1 THEN
      HTP.p (
‘<table border=1
style=”background-color:#FFA500″>’
);

      IF get_title%ISOPEN
      
THEN
         
CLOSE get_title;
      
END IF;

      OPEN get_title;

      FETCH get_title
       
INTO p_title;

      CLOSE get_title;

      l_sql_query := g_report_output;

      OPEN p_sql FOR TO_CHAR (l_sql_query);

      COMMIT;
   
END set_sql;

   PROCEDURE print_data (
      p_session_id 
 
IN   NUMBER,
      p_app_id 
     
IN 
 
NUMBER,
      p_page_id 
    
IN 
 
NUMBER
   )
   
IS
      p_tot_rows 
        
NUMBER 
         
:= 0;
      query_result 
      query_res
;
      query_columns 
     
VARCHAR2 (32000);
      query_tot_result 
  query_res
;
      query_tot_columns 
 
VARCHAR2 (32000);
      v_num1 
            
VARCHAR (32000);
      v_num2 
            
VARCHAR (32000);
      v_num3 
            
VARCHAR (500);
      v_num4 
            
VARCHAR (500);
      v_num5 
            
VARCHAR (500);
      v_num6 
            
VARCHAR (500);
      v_num7 
            
VARCHAR (500);
      v_num8 
            
VARCHAR (500);
   
BEGIN
      
/*executing cursor to find number of rows start
      set_sql(p_session_id
,p_app_id,p_page_id,0.1,query_result,query_tot_result);

      LOOP
      
FETCH query_result INTO query_columns;
      
EXIT WHEN query_result%NOTFOUND;
      p_tot_rows 
:= p_tot_rows + 1
 
–TO find number of
rows;

      
END LOOP;
      
CLOSE query_result;
      
CLOSE query_tot_result;
      executing 
cursor to find number of rows end */
      set_sql (p_session_id
,
               p_app_id
,
               p_page_id
,
               p_tot_rows
,
               query_result
,
               query_tot_result
              )
;
      HTP.p (
‘<table border=1>’);

      LOOP
         
FETCH query_result
          
–INTO V_NUM1;
–,V_NUM2,V_NUM3,V_NUM4,V_NUM5,V_NUM6,V_NUM7,V_NUM8;

         
INTO  query_columns;

         EXIT WHEN query_result%NOTFOUND;
         HTP.p (
‘<tr>’);
         HTP.p (query_columns)
;
          
–htp.p(‘<br>’||’a'<);
          
–htp.p(‘b’);
         
–htp.p(query_columns.”Serial Number”);
          
–HTP.p(V_NUM1);
         HTP.p (
‘</tr>’);
      
END LOOP;

      CLOSE query_result;

      /* htp.p(‘<table border=1>’);
       
FETCH query_tot_result INTO   query_tot_columns;
        htp.p(
‘<tr>’);
       htp.p(query_tot_columns)
;
       htp.p(
‘</tr>’);

        CLOSE query_tot_result;
        htp.p(
‘</table>’);*/
      HTP.p (
‘</table>’);
      HTMLDB_APPLICATION.g_unrecoverable_error 
:= TRUE;
   
END;

   PROCEDURE close_excel
   
IS
   
BEGIN
      
— Send an error code so that the
      
— rest of the HTML does not render
      HTMLDB_APPLICATION.g_unrecoverable_error 
:= TRUE;
   
END;

   PROCEDURE get_excel (
      p_session_id 
    
IN 
 
NUMBER,
      p_app_id 
        
IN 
 
NUMBER,
      p_page_id 
       
IN 
 
NUMBER,
      p_static 
        
IN 
 
VARCHAR2,
      p_user_id 
       
IN 
 
VARCHAR2,
      p_report_output 
 
IN   CLOB
   )
   
IS
   
BEGIN
      l_session_id 
:= p_session_id;
      l_app_id 
:= p_app_id;
      l_page_id 
:= p_page_id;
      gv_session_id 
:= p_session_id;
      gv_static 
:= p_static;
      gv_user_id 
:= p_user_id;
      g_report_output 
:= p_report_output;
      excel_initialize
;
      
—  print_headings;
      print_data (p_session_id
, p_app_id, p_page_id);
     
— pro_error (1 ,’a3′ );
   

close_excel;

   
END;

   PROCEDURE ds_set_sql (
      p_session_id 
 
IN     
 
NUMBER,
      p_app_id 
     
IN 
     
NUMBER,
      p_page_id 
    
IN 
     
NUMBER,
      p_tot_rows 
   
IN   
   
NUMBER,
      p_sql 
        
OUT 
    
query_res,
      p_tot_sql 
    
OUT 
    
query_res
   )
   
IS
      
CURSOR get_ir_id
      
IS
         
SELECT interactive_report_id, report_id
           
FROM apex_application_page_ir_rpt
          
WHERE session_id = p_session_id
            
AND page_id = p_page_id
            
AND base_report_id = NVL (l_base_report_id, base_report_id);

      l_ir_id 
            
NUMBER;
      l_report_id 
        
NUMBER;
      p_cols 
             wwv_flow_global.vc_arr2
;
      p_tot_cols 
         wwv_flow_global.vc_arr2
;
      p_columns 
          
VARCHAR2 (4000);
      p_columns1 
         
VARCHAR2 (4000);
      p_report_label 
     
VARCHAR2 (4000);
      p_format_mask 
      
VARCHAR2 (1000);
      p_max 
              
NUMBER;
      lv_v_slno 
          
VARCHAR2 (32767);
      p_title 
            
VARCHAR2 (50);

      CURSOR get_title
      
IS
         
SELECT SUBSTR (region_name, 1, 50)
           
FROM apex_application_page_regions
          
WHERE application_id = l_app_id
            
AND page_id = l_page_id
            
AND source_type = ‘Interactive Report’;

      CURSOR get_cols
      
IS
         
SELECT report_columns
           
FROM apex_application_page_ir_rpt
          
WHERE application_id = p_app_id
            
AND page_id = p_page_id
            
AND session_id = p_session_id
            
AND interactive_report_id = l_ir_id
            
AND report_id = l_report_id;

      CURSOR get_format_mask (p_column VARCHAR2)
      
IS
         
SELECT column_alias, report_label, format_mask
           
FROM apex_application_page_ir_col
          
WHERE application_id = p_app_id
            
AND page_id = p_page_id
            
AND interactive_report_id = l_ir_id
            
AND column_alias = p_column
            
/* for hiding ALL columns */
            
AND display_order NOT BETWEEN 3
               
                   
  
AND (SELECT MIN (display_order)  1
               
                     
       
FROM apex_application_page_ir_col
               
                     
      
WHERE application_id = p_app_id
               
                     
        
AND page_id = p_page_id);

     
      p_set_query 
        
VARCHAR2 (18000);
      p_set_tot_query 
    
VARCHAR2 (18000);

      CURSOR get_query (c_ir_id NUMBER)
      
IS
         
SELECT sql_query
           
FROM apex_application_page_ir
          
WHERE interactive_report_id = c_ir_id AND page_id = p_page_id;

      CURSOR get_conditions (c_ir_id NUMBER, c_report_id NUMBER)
      
IS
         
SELECT REPLACE
               
   
(
REPLACE (condition_sql,
               
             
‘#APXWS_EXPR#’,
               
             
CONCAT (CONCAT (””, condition_expression),
               
                     
””)
               
            
)
,
               
    
‘#APXWS_EXPR2#’,
               
    
CONCAT (CONCAT (””, condition_expression2), ””)
               
   
) sql_condition
           
FROM apex_application_page_ir_cond
          
WHERE interactive_report_id = c_ir_id
            
AND application_id = p_app_id
            
AND report_id = c_report_id
            
AND page_id = p_page_id
            
AND condition_enabled = ‘Yes’
            
AND condition_type = ‘Filter’;

      l_sql_query 
        
VARCHAR2 (32000);
      l_tot_sql_query 
    
VARCHAR2 (32000);         
                     
 

      l_report_query 
     
VARCHAR2 (32000);
      l_tot_report_query 
 
VARCHAR2 (32000);         
                     
 

      l_query_conditions 
 
VARCHAR2 (24000);
      l_sql_condition 
    
VARCHAR2 (24000);
      l_conditions_exist 
 
VARCHAR2 (1)         
  
:= ‘N’;
      v_title 
            
VARCHAR2 (4000);
   
BEGIN
      
–lv_v_slno := gv_slno;
      
IF get_ir_id%ISOPEN
      
THEN
         
CLOSE get_ir_id;
      
END IF;

      OPEN get_ir_id;

      FETCH get_ir_id
       
INTO l_ir_id, l_report_id;

      CLOSE get_ir_id;

/****************************/
      
IF get_cols%ISOPEN
      
THEN
         
CLOSE get_cols;
      
END IF;

      OPEN get_cols;

      FETCH get_cols
       
INTO p_columns;

      CLOSE get_cols;

      p_cols := apex_util.string_to_table (p_columns);
      p_tot_cols 
:= apex_util.string_to_table (p_columns);
      p_max 
:= p_cols.LAST;
      p_set_query 
:= ”” || ‘<td>’ || ”’||’;
      p_set_tot_query 
:= ”” || ‘<td>’ || ”’||’
                     
   

       
/*******************displaying title row  start */
      
— IF p_tot_rows > 0.1 THEN
      HTP.p (
‘<table border=1
style=”background-color:#FFA500″>’
);

     
      IF get_title%ISOPEN
      
THEN
         
CLOSE get_title;
      
END IF;

      OPEN get_title;

      FETCH get_title
       
INTO p_title;

      CLOSE get_title;

      –select v_heading into v_title from test_heading;
         
—   pro_error (1 ,’n1′ );
      
IF g_report_header IS NOT NULL
      
THEN
         
INSERT INTO ap_t_apex_report_heading_n
               
     
(report_id
, report_header
               
     
)
              
VALUES (p_page_id, g_report_header
               
     
)
;
      
END IF;

      IF g_report_header2 IS NOT NULL
      
THEN
         
INSERT INTO ap_t_apex_report_heading_n
               
     
(report_id
, report_header
               
     
)
              
VALUES (p_page_id, g_report_header2
               
     
)
;
      
END IF;

      IF g_report_header3 IS NOT NULL
      
THEN
         
INSERT INTO ap_t_apex_report_heading_n
               
     
(report_id
, report_header
               
     
)
              
VALUES (p_page_id, g_report_header3
               
     
)
;
      
END IF;

      IF g_report_header4 IS NOT NULL
      
THEN
         
INSERT INTO ap_t_apex_report_heading_n
               
     
(report_id
, report_header
               
     
)
              
VALUES (p_page_id, g_report_header4
               
     
)
;
      
END IF;

      IF g_report_header5 IS NOT NULL
      
THEN
         
INSERT INTO ap_t_apex_report_heading_n
               
     
(report_id
, report_header
               
     
)
              
VALUES (p_page_id, g_report_header5
               
     
)
;
      
END IF;

      IF g_report_header6 IS NOT NULL
      
THEN
         
INSERT INTO ap_t_apex_report_heading_n
               
     
(report_id
, report_header
               
     
)
              
VALUES (p_page_id, g_report_header6
               
     
)
;
      
END IF;

      FOR i IN (SELECT report_header
               
  
FROM ap_t_apex_report_heading_n
               
 
WHERE report_id = p_page_id)
      
LOOP
         HTP.p (i.report_header)
;
      
END LOOP;

      HTP.p (‘</table>’);
      
COMMIT;
      l_sql_query 
:= g_report_output;

      OPEN p_sql FOR TO_CHAR (l_sql_query);
   
END ds_set_sql;

   PROCEDURE ds_print_data (
      p_session_id 
 
IN   NUMBER,
      p_app_id 
     
IN 
 
NUMBER,
      p_page_id 
    
IN 
 
NUMBER
   )
   
IS
      p_tot_rows 
        
NUMBER 
         
:= 0;
      query_result 
      query_res
;
      query_columns 
     
VARCHAR2 (32000);
      query_tot_result 
  query_res
;
      query_tot_columns 
 
VARCHAR2 (32000);
      v_num1 
            
VARCHAR (32000);
      v_num2 
            
VARCHAR (32000);
      v_num3 
            
VARCHAR (500);
      v_num4 
            
VARCHAR (500);
      v_num5 
            
VARCHAR (500);
      v_num6 
            
VARCHAR (500);
      v_num7 
            
VARCHAR (500);
      v_num8 
            
VARCHAR (500);
   
BEGIN
      ds_set_sql (p_session_id
,
               
  
p_app_id
,
               
  
p_page_id
,
               
  
p_tot_rows
,
               
  
query_result
,
               
  
query_tot_result
               
 
)
;
      HTP.p (
‘<table border=1>’);

      LOOP
         
FETCH query_result
          
INTO query_columns;

         EXIT WHEN query_result%NOTFOUND;
         HTP.p (
‘<tr>’);
         HTP.p (query_columns)
;
         HTP.p (
‘</tr>’);
      
END LOOP;

      CLOSE query_result;

      IF g_report_footer1 IS NOT NULL
      
THEN
         HTP.p (
‘<tr>’);
         HTP.p (g_report_footer1)
;
         HTP.p (
‘</tr>’);
      
END IF;

      IF g_report_footer2 IS NOT NULL
      
THEN
         HTP.p (
‘<tr>’);
         HTP.p (g_report_footer2)
;
         HTP.p (
‘</tr>’);
      
END IF;

      IF g_report_footer3 IS NOT NULL
      
THEN
         HTP.p (
‘<tr>’);
         HTP.p (g_report_footer3)
;
         HTP.p (
‘</tr>’);
      
END IF;

      HTP.p (‘</table>’);
      HTP.p (l_ta_scheme)
;
      HTMLDB_APPLICATION.g_unrecoverable_error 
:= TRUE;
   
END;

   PROCEDURE ds_get_excel (
      p_session_id 
     
IN 
 
NUMBER,
      p_app_id 
         
IN 
 
NUMBER,
      p_page_id 
        
IN 
 
NUMBER,
      p_static 
         
IN 
 
VARCHAR2,
      p_user_id 
        
IN 
 
VARCHAR2,
      p_report_output 
  
IN   CLOB,
      p_report_header 
  
IN   CLOB,
      p_report_header2 
      
CLOB,
      p_report_header3 
      
CLOB,
      p_report_header4 
      
CLOB,
      p_report_header5 
      
CLOB,
      p_report_header6 
      
CLOB,
      p_file_name 
           
VARCHAR2,
      p_report_footer1 
      
CLOB,
      p_report_footer2 
      
CLOB,
      p_report_footer3 
      
CLOB
   )
   
IS
   
BEGIN
      l_session_id 
:= p_session_id;
      l_app_id 
:= p_app_id;
      l_page_id 
:= p_page_id;
      gv_session_id 
:= p_session_id;
      gv_static 
:= p_static;
      gv_user_id 
:= p_user_id;
      g_report_output 
:= p_report_output;
      g_report_header 
:= p_report_header;
      g_report_header2 
:= p_report_header2;
      g_report_header3 
:= p_report_header3;
      g_report_header4 
:= p_report_header4;
      g_report_header5 
:= p_report_header5;
      g_report_header6 
:= p_report_header6;
      g_file_name 
:= p_file_name;
      g_report_footer1 
:= p_report_footer1;
      g_report_footer2 
:= p_report_footer2;
      g_report_footer3 
:= p_report_footer3;
      excel_initialize
;
      ds_print_data (p_session_id
, p_app_id, p_page_id);
      g_report_header 
:= NULL;
      g_report_header2 
:= NULL;
      g_report_header3 
:= NULL;
      g_report_header4 
:= NULL;
      g_report_header5 
:= NULL;
      g_report_header6 
:= NULL;
      g_file_name 
:= ‘Excel’;
      HTP.p (
‘<tr><td > ” </td></tr>’);
      HTP.p (
‘<tr><td >
”  </td></tr>’
);
   
END;

   PROCEDURE ps_ds_get_excel_new (
      p_session_id 
     
IN 
 
NUMBER,
      p_app_id 
         
IN 
 
NUMBER,
      p_page_id 
        
IN 
 
NUMBER,
      p_static 
         
IN 
 
VARCHAR2,
      p_user_id 
        
IN 
 
VARCHAR2,
      p_report_output 
  
IN   CLOB,
      p_report_header 
  
IN   CLOB,
      p_report_header2 
      
CLOB,
      p_report_header3 
      
CLOB,
      p_report_header4 
      
CLOB,
      p_report_header5 
      
CLOB,
      p_report_header6 
      
CLOB,
      p_file_name 
           
VARCHAR2,
      p_report_footer1 
      
CLOB DEFAULT NULL,
      p_report_footer2 
      
CLOB DEFAULT NULL,
      p_report_footer3 
      
CLOB DEFAULT NULL
   )
   
IS
      
— this procedure do not includes HTML tags in Excel
output.

      p_sql 
         query_res
;
      l_sql_query 
   
VARCHAR2 (32000);
      query_columns 
 
VARCHAR2 (32000);
   
BEGIN
      g_file_name 
:= p_file_name;
      
/*For initializing the Excel call*/
      excel_initialize
;

      /*Printing the column header*/
      
IF p_report_header IS NOT NULL
      
THEN
         HTP.p (
TO_CHAR (p_report_header));
      
END IF;

      IF p_report_header2 IS NOT NULL
      
THEN
         HTP.p (
TO_CHAR (p_report_header2));
      
END IF;

      IF p_report_header3 IS NOT NULL
      
THEN
         HTP.p (
TO_CHAR (p_report_header3));
      
END IF;

      IF p_report_header4 IS NOT NULL
      
THEN
         HTP.p (
TO_CHAR (p_report_header4));
      
END IF;

      IF p_report_header5 IS NOT NULL
      
THEN
         HTP.p (
TO_CHAR (p_report_header5));
      
END IF;

      IF p_report_header6 IS NOT NULL
      
THEN
         HTP.p (
TO_CHAR (p_report_header6));
      
END IF;

      HTP.p ();

      /*Printing the data values from query */
      
OPEN p_sql FOR TO_CHAR (p_report_output);

      LOOP
         
FETCH p_sql
          
INTO query_columns;

         EXIT WHEN p_sql%NOTFOUND;
         HTP.p (query_columns)
;
      
END LOOP;

      CLOSE p_sql;

      HTP.p ();
      HTP.p (
TO_CHAR (p_report_footer1));
      HTP.p (
TO_CHAR (p_report_footer2));
      HTP.p (
TO_CHAR (p_report_footer3));

      HTMLDB_APPLICATION.g_unrecoverable_error := TRUE;
   

Closing the Excel call

   
EXCEPTION
      
WHEN OTHERS
      
THEN
         
NULL;
   
END;
END doy_pk_apex_excel_download;
?

Step 2:
write the PLSQL code in APEX page using our
custom package (doy_pk_apex_excel_download.ps_ds_get_excel_new). This process
is used to generate Excel file .
DECLARE
   p_report_output     CLOB;
   p_report_output1    CLOB;
   p_report_output2    CLOB;
   p_report_header     CLOB;
   p_report_header2    CLOB;
   p_report_header3    CLOB;
   p_session_id        NUMBER;
   p_app_id            NUMBER;
   p_page_id           NUMBER;
   p_static            VARCHAR2 (1);
   lv_v_user_id        VARCHAR2 (15);
   lv_report_name      VARCHAR2 (100);
   p_user_id           VARCHAR2 (200);
   lv_v_desc_name      VARCHAR2 (1000);
   lv_v_where_clase    VARCHAR2 (4000);
   lv_v_alias_name     VARCHAR2 (4000);
   lv_v_group_name     VARCHAR2 (4000);
   lv_v_order_name     VARCHAR2 (4000);
   lv_v_col_name       VARCHAR2 (4000);
   v_filename          VARCHAR2 (2000);
   select_clause       VARCHAR2 (32000);
BEGIN
   p_report_header :=
         CHR (9)
      || CHR (9)
      || CHR (9)
      || CHR (9)
      || CHR (9)
      || CHR (9)
      || ‘Critical Patterns’
      || CHR (9);
   p_report_header2 := CHR (9) || ‘Report Run
Date’ || CHR (9) || SYSDATE;
   lv_v_group_name :=
      ‘ group by
 homes_fnd_utils.item_number(ii.item_id),
 homes_fnd_utils.item_name(ii.item_id),
 icp.usage_quantity,
 HOMES_FND_UTILS.party_name(ii.CUSTOMER_ID),
 icp.material,
 icp.number_of_cavity,
 to_char(icp.expiry_date,”DD-MON-YYYY”)
 having
 icp.usage_quantity*nvl(icp.number_of_cavity,1)-sum(hpi.poured_quantity)
< 100
 or
 to_char(icp.expiry_date,”DD-MON-YYYY”) <
sysdate+30′;
   p_report_output1 := ‘SELECT ‘;
   p_report_header3 :=
         p_report_header3
      || ‘pattern_number’
      || CHR (9)
      || ‘item_name’
      || CHR (9)
      || ‘customer_name’
      || CHR (9)
      || ‘material’
      || CHR (9)
      || ‘poured_quantity’
      || CHR (9)
      || ‘usage_quantity’
      || CHR (9)
      || ‘cavity’
      || CHR (9)
      || ‘expiry_date’
      || CHR (9);
   p_report_output1 :=
         p_report_output1
      || ‘TA.”pattern_number”||CHR(9)
||TA.”item_name”||CHR(9)
||TA.”customer_name”||CHR(9)
||TA.”material”||CHR(9)
||TA.”poured_quantity”||CHR(9)
||TA.”usage_quantity”||CHR(9)
||TA.”cavity”||CHR(9)
||TA.”expiry_date”||CHR(9)
 FROM ( ‘;
   select_clause :=
         select_clause
      || ‘ select
 homes_fnd_utils.item_number(ii.item_id)
“pattern_number”,
 homes_fnd_utils.item_name(ii.item_id)
“item_name”,
 HOMES_FND_UTILS.party_name(ii.CUSTOMER_ID)
“customer_name”,
 icp.material “material”,
 sum(hpi.poured_quantity)
“poured_quantity”,
 icp.usage_quantity “usage_quantity”,
 icp.number_of_cavity “cavity”,
 to_char(icp.expiry_date,”DD-MON-YYYY”)
“expiry_date”
 from
 homes_inv_heat_pour_items hpi,
 homes_inv_itm_core_patterns icp,
 homes_inv_items ii
 where
 hpi.item_id = icp.item_id
 and icp.core_pattern_type = ”PATTERN”
 and icp.end_date is null
 and icp.item_id = ii.item_id’;
   p_report_output2 := select_clause;
   p_report_output :=
         p_report_output1
      || p_report_output2
      || lv_v_where_clase
      || lv_v_group_name
      || lv_v_order_name
      || ‘) TA 
‘;
   p_static := ‘N’;
   p_app_id := 127;
   p_page_id := 114;
   p_user_id := -1;
   v_filename :=
               ‘Critical Patterns_’ || TO_CHAR
(SYSDATE, ‘DDMMYYYY _HH24MISS’);
 
doy_pk_apex_excel_download.ps_ds_get_excel_new (p_session_id,
                                                  
p_app_id,
                                                  
p_page_id,
                                                  
p_static,
                                                  
p_user_id,
                                                  
p_report_output,
                                                  
p_report_header,
                                                  
p_report_header2,
                                                  
p_report_header3,
                                                  
NULL,
                                                   NULL,
                                                  
NULL,
                                                  
v_filename
                                                 
);
END;
Step 3:
Create
one button to submit the above page process.  

By
Palani Kumar K
  • January 2, 2017 | 19 views