在oracle表单6i中调用另存为对话框

时间:2017-06-21 04:39:03

标签: excel oracle

我一直在使用此标准代码生成Oracle 6i表单中的Excel文件。我需要知道两件事;

  1. 要添加到此代码中的代码行,因此当我按下按钮时,它会显示'生成excel文件'直到它完成生成。
  2. 当它完成生成文件,而不是保存在D上时,它会给我一个保存生成文件的对话框。

    declare
    application ole2.obj_type;
    workbooks ole2.obj_type;
    workbook ole2.obj_type;
    worksheets ole2.obj_type;
    worksheet ole2.obj_type;
    cell ole2.obj_type;
    arglist ole2.list_type;
    row_num number;
    col_num number;
    fontObj ole2.obj_type;
    cursor rec is select emp_code,emp_name,to_char(date_of_birth,'dd/mm/rrrr') date_of_birth from employee_master where date_of_birth is not null;
    procedure SetCellValue(rowid number,colid number,cellValue varchar) is
    begin
      arglist := ole2.create_arglist;
      ole2.add_arg(arglist,rowid);
      ole2.add_arg(arglist,colid);
      cell:= ole2.get_obj_property(worksheet,'Cells',arglist);
      fontObj := ole2.get_obj_property(cell,'Font');
      ole2.destroy_arglist(arglist);
      ole2.set_property(cell,'value',cellValue);
      ole2.set_property(fontObj,'Size',16);
      ole2.set_property(fontObj,'BOLD',1);
      ole2.set_property(fontObj,'ColorIndex',7);
      ole2.release_obj(cell);
    end SetCellValue;
    procedure app_init is
     begin
        application := ole2.create_obj('Excel.Application');
        ole2.set_property(application,'Visible',true);
        workbooks := ole2.get_obj_property(application,'workbooks');
        workbook := ole2.invoke_obj(workbooks,'add');
        worksheets := ole2.get_obj_property(application,'worksheets');
        worksheet := ole2.invoke_obj(worksheets,'add');
        ole2.set_property(worksheet,'Name','Emp Sheet');
     end app_init;
    
    procedure save_excel(path varchar,filename varchar) is
    begin
      OLE2.Release_Obj(worksheet);
      OLE2.Release_Obj(worksheets);
      -- Save the Excel file created
      If path is not null then
         Arglist := OLE2.Create_Arglist;
         OLE2.Add_Arg(Arglist,path||'\'||file_name||'.xls');
         OLE2.Invoke(workbook, 'SaveAs', Arglist);
         OLE2.Destroy_Arglist(Arglist);
      end if;
    end save_excel;
    
    begin
     app_init;
      row_num:=1;
      col_num:=1;
      SetCellValue(row_num,col_num,'Emp Code');
      col_num:=col_num + 1;
      SetCellValue(row_num,col_num,'Emp Name');
      col_num:=col_num + 1;
      SetCellValue(row_num,col_num,'Date of Birth');
      for i in rec loop
          row_num:=row_num + 1;
          col_num:=1;
          SetCellValue(row_num,col_num,i.emp_code);     
          col_num:=2;
          SetCellValue(row_num,col_num,i.emp_name);     
          col_num:=3;
          SetCellValue(row_num,col_num,i.date_of_birth);        
      end loop;       
        save_excel('d:\excel_export','emp_data');             
      OLE2.Release_Obj(workbook);
      OLE2.Release_Obj(workbooks);
      OLE2.Release_Obj(application);    
     end;
    

0 个答案:

没有答案