• Creating Excel File in Oracle Forms


    Below is the example to create an excel file in Oracle Forms.

    Pass the Sql query string to the below procedure to generate an Excel file using Ole2 package.

    PROCEDURE Create_Excel_File (CSQL Varchar2)
    Is
       source_cursor    Integer;
       l_colCnt         Number            Default 0;
       l_descTbl        Dbms_sql.desc_tab;
       newval1          Varchar2 (4000);
       application      OLE2.OBJ_TYPE;
       workbooks        OLE2.OBJ_TYPE;
       workbook         OLE2.OBJ_TYPE;
       worksheets       OLE2.OBJ_TYPE;
       worksheet        OLE2.OBJ_TYPE;
       colour           OLE2.OBJ_TYPE;

       cell             OLE2.OBJ_TYPE;
       RANGE            OLE2.OBJ_TYPE;
       range_col        OLE2.OBJ_TYPE;
       range_row        OLE2.OBJ_TYPE;
       args             OLE2.LIST_TYPE;
       rows_processed   Number;
       row_n            Number;
       VAL              Varchar2 (100);
       x                Number;
       filename         Varchar2 (200);
    BEGIN
       BEGIN
          source_cursor := Dbms_Sql.open_Cursor;
          Dbms_Sql.parse (source_cursor, cSql, 2);
          Dbms_Sql.describe_Columns (c => source_cursor, col_cnt => l_colCnt, desc_t => l_descTbl);
       EXCEPTION
          When Others
          Then
             Error_Message (SQLERRM);
             RETURN;
       END;

       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, 1);
       worksheet := OLE2.GET_OBJ_PROPERTY (worksheets, 'Item', args);
       OLE2.DESTROY_ARGLIST (args);

       For T In 1 .. l_colCnt
       LOOP
          BEGIN
             Dbms_Sql.define_Column (source_cursor, T, newval1, 4000);
             args := OLE2.CREATE_ARGLIST;
             OLE2.ADD_ARG (args, 1);
             OLE2.ADD_ARG (args, T);                                                      --Next column
             cell := OLE2.GET_OBJ_PROPERTY (worksheet, 'Cells', args);
             OLE2.DESTROY_ARGLIST (args);
             colour := ole2.get_obj_property (cell, 'Borders');
             ole2.set_property (colour, 'ColorIndex', 1);
             ole2.Release_obj (colour);
             colour := ole2.get_obj_property (cell, 'Interior');
             ole2.set_property (colour, 'ColorIndex', 15);
             ole2.Release_obj (colour);
             OLE2.SET_PROPERTY (cell, 'Value', l_descTbl (T).col_name);
             OLE2.Release_obj (cell);
          EXCEPTION
             When Others
             Then
                Null;
          END;
       END LOOP;

       Rows_processed := Dbms_Sql.EXECUTE (source_cursor);
       row_n := 1;

       LOOP
          IF Dbms_Sql.fetch_Rows (source_cursor) > 0
          Then
             For T In 1 .. l_colCnt
             LOOP
                BEGIN
                   Dbms_Sql.column_Value (source_cursor, T, newval1);
                   args := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG (args, row_n + 1);
                   OLE2.ADD_ARG (args, T);                                                --Next column
                   cell := OLE2.GET_OBJ_PROPERTY (worksheet, 'Cells', args);
                   OLE2.DESTROY_ARGLIST (args);
                   colour := ole2.get_obj_property (cell, 'Borders');
                   ole2.set_property (colour, 'ColorIndex', 1);
                   ole2.Release_obj (colour);
                   OLE2.SET_PROPERTY (cell, 'Value', newval1);
                   OLE2.Release_obj (cell);
                EXCEPTION
                   When Others
                   Then
                      EXIT;
                END;

                newval1 := Null;
             END LOOP;
          Else
             EXIT;
          END IF;

          row_n := row_n + 1;
       END LOOP;

       Dbms_Sql.close_Cursor (source_cursor);
       -- Autofit columns
       RANGE := OLE2.GET_OBJ_PROPERTY (worksheet, 'UsedRange');
       range_col := OLE2.GET_OBJ_PROPERTY (RANGE, 'Columns');
       range_row := OLE2.GET_OBJ_PROPERTY (RANGE, 'Rows');
       OLE2.INVOKE (range_col, 'AutoFit');
       OLE2.INVOKE (range_row, 'AutoFit');
       OLE2.Release_obj (RANGE);
       OLE2.Release_obj (range_col);
       OLE2.Release_obj (range_row);
       -- Get filename and path
       filename :=  'Yourexcel.xls';

       -- Save as worksheet
       IF Nvl (filename, '0') <> '0'
       Then
          OLE2.SET_PROPERTY (application, 'Visible', 'True');
          args := OLE2.CREATE_ARGLIST;
          OLE2.ADD_ARG (args, filename);
          OLE2.INVOKE (worksheet, 'SaveAs', args);
          OLE2.DESTROY_ARGLIST (args);
       END IF;

    --  OLE2.INVOKE( workbook ,'Close');
       OLE2.Release_obj (worksheet);
       OLE2.Release_obj (worksheets);
       OLE2.Release_obj (workbook);
       OLE2.Release_obj (workbooks);
       OLE2.Release_obj (application);
    END;

    Download demo form from the following link
    Generate Excel Report

     
  • 相关阅读:
    239. [LeetCode ]Sliding Window Maximum
    152.[LeetCode] Maximum Product Subarray
    53. [LeetCode] Maximum Subarray
    90 [LeetCode] Subsets2
    78[LeetCode] Subsets
    练习7.52
    练习7.47、7.48、7.49、7.51
    关于类类型的隐式类型转换
    练习7.44、7.45、7.46
    练习7.36、7.37、7.39、7.40
  • 原文地址:https://www.cnblogs.com/quanweiru/p/6219945.html
Copyright © 2020-2023  润新知