CREATE OR REPLACE PACKAGE plsql2excel IS function test1 return number; END plsql2excel; / CREATE OR REPLACE PACKAGE BODY plsql2excel IS function test1 return number IS excelReport ExcelDocumentType := ExcelDocumentType(); documentArray ExcelDocumentLine := ExcelDocumentLine(); lnCntRange number; lnMaxIme number; lnMaxPrezime number; lnMaxEmail NUMBER; v_file UTL_FILE.FILE_TYPE; BEGIN -- Open the Excel-Document: excelReport.documentOpen; -- Configure Styles: excelReport.stylesOpen; -- Include default style: excelReport.defaultStyle; -- Add custom styles: /* Style for columnd header row */ excelReport.createStyle( p_style_id => 'ColumnHeader', p_font => 'Verdana', p_ffamily => 'Swiss', p_fsize => '12', p_bold => 'Y', p_align_horizontal => 'Center', p_align_vertical => 'Bottom', p_cell_color => '#FF6600', p_cell_pattern => 'Solid', p_custom_xml => ''|| ''|| ''|| ''|| ''|| '' ); excelReport.createStyle( p_style_id => 'WithLinesString', p_font => 'Verdana', p_ffamily => 'Swiss', p_fsize => '12', p_custom_xml => ''|| ''|| ''|| ''|| '' ); excelReport.createStyle( p_style_id => 'WithLinesNumber', p_font => 'Verdana', p_ffamily => 'Swiss', p_fsize => '12', p_align_horizontal => 'Right', p_custom_xml => ''|| ''|| ''|| ''|| '' ); excelReport.createStyle( p_style_id => 'ClosingRow', p_custom_xml => ''|| ''|| '' ); excelReport.createStyle( p_style_id => 'ClosingRowNumber', p_number_format => '###', p_custom_xml => ''|| ''|| '' ); -- Close Styles excelReport.stylesClose; -- Get values for the settings (range and column width): select count(*), max(length(ime)) as max_ime, max(length(prezime)) as max_prezime, max(length(email)) as max_email into lnCntRange, lnMaxIme, lnMaxPrezime, lnMaxEmail from oracle2excel; -- Open Worksheet: excelReport.worksheetOpen('Popis osoba'); -- Define Sheet Conditional Formatting values: excelReport.worksheetCondFormatOpen(p_range => 'R2C1:R'||TO_CHAR(lnCntRange + 1)||'C4'); excelReport.createCondFormat( p_qualifier => NULL, p_value => 'MOD(ROW(),2)=0', p_format_style => 'background:#555555;color:#EEEEEE' ); excelReport.createCondFormat( p_qualifier => NULL, p_value => 'MOD(ROW(),2)=1', p_format_style => 'background:#DDDDDD;color:#444444' ); excelReport.worksheetCondFormatClose; -- Define columns: excelReport.defineColumn(p_index => '1', p_width => 13); excelReport.defineColumn(p_index => '2', p_width => lnMaxIme + 5); excelReport.defineColumn(p_index => '3', p_width => lnMaxPrezime + 5); excelReport.defineColumn(p_index => '4', p_width => lnMaxEmail + 5); -- Define header row: excelReport.rowOpen; -- Define header row data cells: excelReport.addCell(p_style => 'ColumnHeader', p_data=> ' Br. '); excelReport.addCell(p_style => 'ColumnHeader', p_data=> ' Ime '); excelReport.addCell(p_style => 'ColumnHeader', p_data=> ' Prezime '); excelReport.addCell(p_style => 'ColumnHeader', p_data=> ' Email '); excelReport.rowClose; -- Populate rows and cells: FOR rec IN(select * from oracle2excel order by id ) LOOP excelReport.rowOpen; excelReport.addCell( p_style => 'WithLinesNumber', p_data_type => 'Number', p_data => rec.id --p_formula => 'SUM(RC[-5]:RC[-1])' ); excelReport.addCell( p_style => 'WithLinesString', p_data_type => 'String', p_data => rec.ime ); excelReport.addCell( p_style => 'WithLinesString', p_data_type => 'String', p_data => rec.prezime ); excelReport.addCell( p_style => 'WithLinesString', p_data_type => 'String', p_data => rec.email, p_HRef => 'mailto:'||rec.email ); --lnUngerade := lnUnGerade + 1; excelReport.rowClose; END LOOP; -- Add closing row: excelReport.rowOpen; excelReport.addCell(p_style => 'ClosingRowNumber', p_data_type => 'Number'); excelReport.addCell(p_style => 'ClosingRow', p_data_type => 'String'); excelReport.addCell(p_style => 'ClosingRow', p_data_type => 'String'); excelReport.addCell(p_style => 'ClosingRow', p_data_type => 'String'); excelReport.rowClose; -- Close the worksheet: excelReport.worksheetClose; -- Close the document: excelReport.documentClose; -- Get the document content: documentArray := excelReport.getDocumentData; v_file := utl_file.fopen('EXCEL_DIR', 'oracle2excel.xls', 'w', 4000); FOR i IN 1..documentArray.COUNT LOOP UTL_FILE.put_line(v_file, documentArray(i)); END LOOP; utl_file.fclose(v_file); return 1; EXCEPTION WHEN OTHERS THEN IF utl_file.is_open(v_file) THEN utl_file.fclose(v_file); END IF; dbms_output.put_line(SQLERRM); return 0; END test1; END plsql2excel; /