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中进程与线程的使用场景
  • 原文地址:https://www.cnblogs.com/quanweiru/p/6219945.html
Copyright © 2011-2022 走看看