Home » Developer & Programmer » Forms » Cannot create a document .doc from a template OLE2 problem
Cannot create a document .doc from a template OLE2 problem [message #86645] Fri, 15 October 2004 15:23
Roger Simms
Messages: 14
Registered: May 2004
Junior Member
I am unable to save a .doc file from a template using save as from A word document. The form opens a word template and populates the documents bookmarks and saves the file in a default directory with a file name specified form an oracle table however when the user tries to save the document to another folder the option to save it as a doc instead of a template is not available. I can not work out if it is the opening of the template or the saving procedure that is causing the problem I have included the whole package below crossing my fingers that someone could shed some light on the problem 

 

PACKAGE BODY word_document IS

application OLE2.OBJ_TYPE;
documents OLE2.OBJ_TYPE;
document OLE2.OBJ_TYPE;

bookmarks OLE2.OBJ_TYPE;

--forward declaration.
PROCEDURE replace_bookmark( ident IN VARCHAR2, val IN VARCHAR2);

 /*
  * Function INIT RETURNs BOOLEAN
  * TRUE - Successful
  * FALSE - error occured
  */
 FUNCTION init(filename IN VARCHAR2)
 RETURN BOOLEAN
 IS
 BEGIN

  init(filename);
  RETURN true;
 EXCEPTION
 WHEN OTHERS THEN
  RETURN FALSE;
 END INIT;

/*
 * PROCEDURE INIT
 * RAISE EXCEPTION ON ERROR
 */
 PROCEDURE init(filename IN VARCHAR2)
 IS
  arglist OLE2.LIST_TYPE;
 BEGIN
  BEGIN
   application := OLE2.Create_Obj('Word.Application');
  EXCEPTION
   WHEN OLE2.OLE_ERROR THEN
    RAISE word_failed;
  END;
  BEGIN
   documents := OLE2.Get_Obj_Property(application,'documents');
   arglist := OLE2.create_arglist;
   ole2.add_arg(arglist,filename);
   document := OLE2.Invoke_obj(documents,'open',arglist);
   OLE2.Destroy_Arglist(arglist);
  EXCEPTION
   WHEN OLE2.OLE_ERROR THEN
    RAISE word_doc_not_created;
  END;

  BEGIN
   bookmarks := OLE2.Get_Obj_Property(document,'bookmarks');
  EXCEPTION
   WHEN OLE2.OLE_ERROR THEN
    RAISE word_doc_has_no_bookmarks;
  END;
 END init;

 FUNCTION save(filename IN VARCHAR2)
 RETURN BOOLEAN
 IS
 BEGIN
  save(filename);
  RETURN TRUE;
 EXCEPTION
  when OTHERS THEN
   RETURN FALSE;
 END;

 PROCEDURE save(filename IN VARCHAR2)
 IS
  arglist OLE2.LIST_TYPE;
 BEGIN
  --####SAVE the new file
  arglist := OLE2.create_arglist;
  ole2.add_arg(arglist,filename);
  OLE2.Invoke(document,'saveAs',arglist);
  OLE2.Destroy_Arglist(arglist);
 EXCEPTION
  WHEN OLE2.OLE_ERROR THEN
   RAISE word_doc_not_saved;
 END;

 PROCEDURE setVisible(b IN BOOLEAN)
 IS
  tmp OLE2.OBJ_TYPE;
 BEGIN
  --#Make Word visible
  OLE2.set_Property(application,'visible',b);
  
  -- 'ActiveWindow.ActivePane.View.ShowAll = TRUE'
  tmp := OLE2.get_Obj_property(application,'ActiveWindow');
  tmp := OLE2.get_Obj_property(tmp,'ActivePane');
  tmp := OLE2.get_Obj_property(tmp,'View');
  OLE2.set_Property(tmp,'ShowAll','FALSE');
 EXCEPTION
  WHEN OTHERS THEN NULL;
 END;

 PROCEDURE finish
 IS BEGIN
  --#Clean up references
  OLE2.Release_Obj(bookmarks);
  OLE2.Release_Obj(document);
  OLE2.Release_Obj(documents);
  OLE2.Release_Obj(application);
 EXCEPTION
  WHEN OLE2.OLE_ERROR THEN
   NULL;
 END;

 PROCEDURE quit
 IS
 BEGIN
  IF application IS NOT NULL THEN
   OLE2.Invoke(application,'Quit');
  END IF;
 EXCEPTION
  WHEN OTHERS THEN
   RAISE;
 END;

 PROCEDURE process_bookmarks(mark_data iss_report.data_table)
 IS
  data_label VARCHAR2(255);
  data_value VARCHAR2(2000);
 BEGIN

  FOR loop_index in mark_data.first .. mark_data.last LOOP
   replace_bookmark(
    mark_data(loop_index).data_name,
    mark_data(loop_index).data_value);
  END LOOP;
 END;

 PROCEDURE replace_bookmark
 (
  ident IN VARCHAR2,
  val IN VARCHAR2)
 IS
  arglist OLE2.LIST_TYPE;
  bookmark OLE2.OBJ_TYPE;
 BEGIN
  arglist := OLE2.create_arglist;
  ole2.add_arg(arglist,ident);
  bookmark := OLE2.Invoke_Obj(bookmarks,'Item',arglist);
  OLE2.Destroy_Arglist(arglist);

  OLE2.set_property(bookmark,'Range',val);

 EXCEPTION
  -- ignore all errors
  WHEN OTHERS THEN NULL;
 END;
 
 PROCEDURE setStyleSize(stylename IN VARCHAR2, fontsize IN PLS_INTEGER)
 IS
  styles OLE2.OBJ_TYPE;
  style OLE2.OBJ_TYPE;
  font OLE2.OBJ_TYPE;
  arglist OLE2.LIST_TYPE;
 BEGIN
  styles := OLE2.get_Obj_property(document,'styles');

  arglist := OLE2.create_arglist;
  ole2.add_arg(arglist,stylename);
  style := OLE2.Invoke_Obj(styles,'Item',arglist);
  OLE2.Destroy_Arglist(arglist);  
  
  font := OLE2.get_Obj_property(style,'font');
  OLE2.set_property(font,'size',fontsize);
 EXCEPTION
  WHEN OTHERS THEN
   RAISE;
 END;
 
END;

 
Previous Topic: dynamic handle menu items in FORMS 6i
Next Topic: Data Transfer from RS 232 port to Oracle Form 6i
Goto Forum:
  


Current Time: Fri Apr 19 18:01:19 CDT 2024