zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    使用Python创建自己的Instagram滤镜
    TensorFlow v2.0实现逻辑斯谛回归
    自动驾驶研究回顾:CVPR 2019摘要
    dp cf 20190613
    简单搜索 kuangbin C D
    树形dp compare E
    区间dp E
    Codeforces Round #564 (Div. 2)
    网络流 + 欧拉回路 = B
    网络流 A
  • 原文地址:https://www.cnblogs.com/quanweiru/p/6219945.html
Copyright © 2011-2022 走看看