Word OLE2

Hello,
I am writing some text and a table in a word document using OLE2.
I want to write some text before the table and after the table.
Currently, I manage to write the text before the table and to write the table with its content,
but when I try to write the text that should come after the table, it is written in the first cell of the table...
How can I manage to move the cursor position on the next line after (outside) the table?
Thank you.

Anyways i did some macro debugging myself. Atleast can relate to some things.
May be you can share your code in the SDN Wiki for the reference of mortal like us.
Here is what is find from the macro debugging:
Selection.TypeText Text:="OLE TABLE"
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="OLE TABLE"
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="OLE TABLE"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveDown Unit:=wdLine, Count:=2
    Selection.TypeParagraph
    Selection.TypeText Text:="Out of table text"
Anyways you have solved your problem.
BR,
Suhas

Similar Messages

  • Word ole2 top margin

    Hello,
    I am creating a word doc using ole2 and all works fine exept one detail:
    word document contains several blank rows as top margin.
    I would not like to have a top margin.
    Any idea?

    I would like to know in brief about the way you have achived it, I am a new to OLE and try to do the same.
    Regards,
    Dantham Conpolwedson

  • OLE2 Doc/Code snippet to assist in creating a word doc with underlined text

    I would like to use OLE2 to create a simple Word document. I would like some of the text to be bold/underlined and the rest of the text to be regular. There seems to be a serious dearth of information regarding OLE2 in conjunction with PS/SQL in Word applications. We're running Forms 6 and Oracle 9i.
    I don't believe that I need to use the techniques described in the Forms Manual (OLE2 containers, etc.). I have managed to create a Word doc and write some text to it but I've been unable to find out/guess at the syntax that I'd need to control bolding and underlining. It would be a big help if I could just find the syntax for Word OLE2 commands. During my documentation search, I seem to remember a post that mentioned 'Reference 2' and maybe 'Reference 3' as a source of information related to OLE2 in PL/SQL code. If anyone can give me a shove in the right direction I'm more than willing to read the manuals. I won't be too disappointed if someone could send me a code snippet either!
    Thanks,
    Ron Walker

    Hi Ron,
    Office ships with a number of resources that you will find indispensable for the sort of work you're doing. Take a look at the VBA IDE (Visual Basic for Applications IDE). You may already be familiar with it, if you've ever written a Word macro, but to call it a macro editor sells it short -- it is a full-blown development environment. Its Object Browser allows you to browse Word's object model, search by keyword, and view call syntax.
    In case you aren't familiar with the VBA IDE, try this:
    1. Open Word
    2. Switch between Word and the VBA IDE by pressing <Alt><F11>
    3. Open the Object Browser by pressing <F2>
    Spend some time familiarizing yourself with the Object Browser. Constrain its scope by selecting the Word library instead of <All Libraries> (the default). Learn to search by keyword. Click on items within your results for details. If Visual Basic Help is installed, pressing <F1> will raise help on a selected item.
    Visual Basic Help may not be part of the Compact or Typical install. Running Office Setup, either from the install CD, or through Add/Remove Programs under Control Panel, will allow you to add the feature. (The Office installer lists Visual Basic Help in the Office Tools section.)
    I have found the VBA IDE to be the perfect place for prototyping and testing automated processes. It is a far friendlier environment for learning Office automation, as it offers code completion and context-driven help. Once the process works, I manually translate my VBA routine into Forms PL/SQL, which is fairly painless. I've written a short tutorial, that I will post shortly -- I didn't want to bury it in this thread!
    Hope this helps,
    Eric Adamson
    Lansing, Michigan

  • OLE automation with Word

    I had forms developped with forms 4.5
    I did things like that :
    -- open OLE object in Word
    Forms_OLE.Activate_Server(wordItem);
    application :=OLE2.CREATE_OBJ('Word.Basic');
    Forms_OLE.Exec_Verb(wordItem, 1);
    -- insert text in Word document
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args, text);
    OLE2.Invoke(application, 'Insert', args);
    OLE2.Destroy_Arglist(args);
    -- print document
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args, 0);
    OLE2.Invoke(application, 'FilePrint', args);
    OLE2.Destroy_Arglist(args);
    -- exit Word
    OLE2.Invoke(application, 'FileExit');
    -- release server
    if (Forms_OLE.Server_Active(item_id)) then
    Forms_OLE.Close_Server(item_id);
    end if;
    With Form 6.0, Invoke method seems not to work anymore.
    I suppose I have to use
    Init_OleArgs(2);
    Add_OleArg('insertText', VT_BSTR);
    Add_OleArg('my text', VT_BSTR);
    Call_Ole(itemName, ?);
    Is it that and what should be the 2nd parameter of Call_Ole method ?
    Thanks
    Nico
    null

    With Forte Release2 supporting only OLE callout, you can use DDE
    to pass data; but with Release 3 which supports OLE callin , you
    should be able to pass data both ways.
    - Arvind
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Arvind Kumar Krishnaswamy
    Digital/Forte Software Products Group
    Digital Equipment Corporation ______________________
    1800,Harrison Street,Suite 1700, | | | | | | | |
    Oakland.CA 94612 USA |d |i |g |i |t |a |l |
    | | | | | | | |
    Tel : 510-251-6537 ----------------------
    Fax : 510-251-6531
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • Returning strings from OLE2 Word object (Forms 4.5)

    Below is an example of how to return string and numeric values from OLE2 objects. In this example the OLE2 object is a MS Word document, and I want to fetch all the bookmarks in the Document into a Forms 4.5 Varchar2. To do this I first need to get the count of bookmarks.
    Getting a string property from an OLE2 object is a common OLE2 requirement but is poorly documented. This is the ONLY way it can be done, as OLE2.INVOKE_CHAR returns a single character not a string. Use OLE2.INVOKE_OBJ, then OLE2.GET_CHAR_PROPERTY which does return a string, as shown below, to return a string from an OLE object (or OLE property).
    Also note how you can only get the child object from its parent, not the grandchild (etc) object, so multiple (cascading) GET_OBJ_PROPERTY calls are required.
    /* by: Marcus Anderson (Anderson Digital) (MarcusAnderson.info) */
    /* name: Get_Bookmarks */
    /* desc: Returns a double quoted CSV string containing the document*/
    /* bookmarks. CSV string will always contain a trailing comma*/
    /* EG: "Bookmark1","Bookmark2",Bookmark3",Bookmark4", */
    /*               NB: This requires that Bookmarks cannot contain " chr */
    PROCEDURE Get_Bookmarks (pout_text OUT VARCHAR2)
    IS
    v_text           VARCHAR2(80);
    v_num                         NUMBER(3);
         v_arglist OLE2.LIST_TYPE;
         v_Application     OLE2.OBJ_TYPE;
    v_ActiveDoc      OLE2.OBJ_TYPE;
    v_Bookmarks          OLE2.OBJ_TYPE;
    v_Item                    OLE2.OBJ_TYPE;
    v_i                              NUMBER(3);
    BEGIN
              v_Application     := LDWord.MyApplication; -- Word doc opened elsewhere
                   /* Set v_num = ActiveDocument.Bookmarks.Count */
    v_ActiveDoc := OLE2.GET_OBJ_PROPERTY (v_Application, 'ActiveDocument');
    v_Bookmarks := OLE2.GET_OBJ_PROPERTY (v_ActiveDoc , 'Bookmarks');
    v_num := OLE2.GET_NUM_PROPERTY (v_Bookmarks, 'Count'); -- NB: Returns numeric property
                   /* Build the output string, pout_text. */
    FOR v_i in 1..v_num LOOP
                        /* Set v_item = ActiveDocument.Bookmarks.Item(v_i) */
    v_arglist := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG (v_arglist, v_i);
    v_Item := OLE2.INVOKE_OBJ (v_Bookmarks, 'Item', v_arglist); -- NB: returns parent object (array element)
    OLE2.DESTROY_ARGLIST (v_arglist);
                        /* Set v_text = ActiveDocument.Bookmarks.Item(v_i).Name */
    v_text := OLE2.GET_CHAR_PROPERTY (v_Item, 'Name');                    -- NB: Returns string/varchar2 property
    pout_text := pout_text || '"' || v_text || '",' ;
    END LOOP;
    END;

    Please repost in the Forms discussion forum.
    - OTN

  • Problem entering values in table after creating it in Word using OLE2

    Hi,
    I want to create a Word document from a Oracle Forms 6i application. The document will have standard text followed by a table. The cells of this table are to be populated from fields in the Forms application.
    I have created a sample code below. When executed from within the Forms application, it creates a document fine. It writes the text "Hello World". It then creates a table as expected. But when I try to enter a value "Cell Value" in the table, the value does not get written to the cell of the table. Instead it writes the value outside the table.
    Can someone please tell me what I am doing wrong here and what I need to do so that after writing the text on the document I can write values into the table also.
    Any help will be much appreciated.
    Here is the code(it works but then it doesn't ):
    PROCEDURE TEST_PROC IS
    hApplication OLE2.OBJ_TYPE;
    hDocuments OLE2.OBJ_TYPE;
    hDocument OLE2.OBJ_TYPE;
    hSelection OLE2.OBJ_TYPE;
    hParagraphFormat OLE2.OBJ_TYPE;
    hRange OLE2.OBJ_TYPE;
    hFont OLE2.OBJ_TYPE;
    hTables OLE2.OBJ_TYPE;
    hTable OLE2.OBJ_TYPE;
    args OLE2.LIST_TYPE;
    wdAlignParagraphLeft CONSTANT number(3) := 0; --Default
    wdword9tablebehavior CONSTANT NUMBER (5) := 1;
    wdautofitfixed CONSTANT NUMBER (5) := 0;
    ---- wdUnits Class members
    wdcharacter CONSTANT NUMBER (5) := 1;
    wdmove CONSTANT NUMBER (5) := 0; --Default
    --wdBorderType Class members
    wdborderleft CONSTANT NUMBER := -2;
    wdborderright CONSTANT NUMBER := -4;
    wdbordertop CONSTANT NUMBER := -1;
    wdborderbottom CONSTANT NUMBER := -3;
    --WdLineStyle Class member
    wdlinestylenone CONSTANT NUMBER := 0;
    BEGIN
    hApplication:=OLE2.CREATE_OBJ('Word.Application');
    OLE2.SET_PROPERTY(hApplication, 'Visible', 1);
    hDocuments := OLE2.GET_OBJ_PROPERTY(hApplication, 'Documents');
    hDocument := OLE2.INVOKE_OBJ(hDocuments, 'Add');
    hSelection := OLE2.GET_OBJ_PROPERTY(hApplication, 'Selection');
    hFont := OLE2.GET_OBJ_PROPERTY(hSelection, 'Font');
    OLE2.SET_PROPERTY(hFont, 'Name', 'Calibri');
    OLE2.SET_PROPERTY(hFont, 'Size', 11);
    OLE2.SET_PROPERTY(hFont, 'Bold', FALSE );
    OLE2.INVOKE(hSelection, 'TypeParagraph');
    hParagraphFormat := OLE2.GET_OBJ_PROPERTY(hSelection, 'ParagraphFormat');
    OLE2.SET_PROPERTY(hParagraphFormat, 'Alignment', wdAlignParagraphLeft);
    OLE2.RELEASE_OBJ(hParagraphFormat);
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args, 'Hello World');
    OLE2.INVOKE(hSelection, 'TypeText', args);
    OLE2.DESTROY_ARGLIST(args);
    OLE2.INVOKE(hSelection, 'TypeParagraph');
    htables := ole2.get_obj_property (hdocument, 'Tables');
    hrange := ole2.get_obj_property (hselection, 'Range');
    args := ole2.create_arglist;
    ole2.add_arg_obj (args, hrange); --Range
    ole2.add_arg (args, 1); --NumRows
    ole2.add_arg (args, 6); --NumColumns
    ole2.add_arg (args, wdword9tablebehavior); --DefaultTableBehavior
    ole2.add_arg (args, wdautofitfixed); --FitBehavior
    htable := ole2.invoke_obj (htables
    ,'Add'
    ,args
    args := ole2.create_arglist;
    ole2.add_arg (args, wdcharacter);
    ole2.add_arg (args, 1);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveLeft'
    ,args
    ole2.destroy_arglist (args);
    args := ole2.create_arglist;
    ole2.add_arg (args, 'CellValue');
    ole2.invoke (hselection
    ,'TypeText'
    ,args
    ole2.destroy_arglist (args);
    ole2.RELEASE_OBJ (happlication);
    ole2.RELEASE_OBJ (hdocuments);
    ole2.RELEASE_OBJ (hdocument);
    ole2.RELEASE_OBJ (hfont);
    ole2.RELEASE_OBJ (hparagraphformat);
    ole2.RELEASE_OBJ (htables);
    ole2.RELEASE_OBJ (hrange);
    END;

    Once again thanks for the help John. Unfortunately I cannot use only bookmarks, because the text to be entered from the application is of undetermined length and therefore since the possibility of wrapping exists, it would not be able to give me the same formatting abilty as using a table.
    However, the good news is that I have been able to find the solution. I am posting my code here so that it is available to anyone else who might have the same issue. Thanks again.
    Here is my code and my comments in it explain what it does.
    PROCEDURE extract_to_word
    IS
    /* First of all I would like to acknowledge the help I have got from experts who have posted a lot of this code on the web which I have used here. Special thanks go to someone by the name of sfvb
    found here http://www.tek-tips.com/userinfo.cfm?member=sfvbsfvb
    This procedure does the following:
    1. Opens a word document.
    2. Creates a header and pastes a picture in the header e.g your company logo with address. Please note that the image should have both the address and the logo in it. It can be created using paint where you can write your address at one end and paste a bmp or jpg picture of your logo at the other end.
    3. Writes text with specified font and size. It calls a separate procedure PRINT_LINE to do this.
    4. Creates a table on the document with specified number of columns with fixed width.
    5. Populates the cells of the table-
    first with headers written by calls to WRITE_HEADINGS procedure.
    next with data from a block of the Forms application by calls to WRITE_DATA procedure
    6. Comes out of the table and continues to write text.
    The three procedures that are repeatedly called are described after the end of this procedure.
    Note: While I have made every attempt to ensure that the code does not generate error on account of my writing the explanatory notes, I cannot be sure of having made some typos. If the code does not compile, it is most probably be on account of something I have missed in entering the comments and explanation.
    Disclaimer:
    I am not the sole author of this code. I have taken help from other open sources and copyright infringement if any is entirely unintentional.
    happlication ole2.obj_type;
    hwindow ole2.obj_type;
    hpane ole2.obj_type;
    hview ole2.obj_type;
    hdocuments ole2.obj_type;
    hdocument ole2.obj_type;
    hselection ole2.obj_type;
    hparagraphformat ole2.obj_type;
    hrange ole2.obj_type;
    hfields ole2.obj_type;
    hfont ole2.obj_type;
    hinlineshapes ole2.obj_type;
    hpars ole2.obj_type;
    hpar ole2.obj_type;
    htabstops ole2.obj_type;
    hactivedocument ole2.obj_type;
    htables ole2.obj_type;
    htable ole2.obj_type;
    hcolumns ole2.obj_type;
    hcells ole2.obj_type;
    hrows ole2.obj_type;
    hshading ole2.obj_type;
    hinsertrow ole2.obj_type;
    hborders ole2.obj_type;
    hshading ole2.obj_type;
    args ole2.list_type;
    wdalignparagraphleft CONSTANT NUMBER (3) := 0;
    wdalignparagraphcenter CONSTANT NUMBER (3) := 1;
    wdalignparagraphright CONSTANT NUMBER (3) := 2;
    wdseekcurrentpageheader CONSTANT NUMBER (3) := 9;
    wdseekcurrentpagefooter CONSTANT NUMBER (3) := 10;
    wdseekmaindocument CONSTANT NUMBER (3) := 0;
    wdfieldpage CONSTANT NUMBER (3) := 33;
    wdfieldnumpages CONSTANT NUMBER (3) := 26;
    wdpagebreak CONSTANT NUMBER (3) := 7;
    wdstory CONSTANT NUMBER (3) := 6;
    wdword CONSTANT NUMBER (5) := 2;
    wdsentence CONSTANT NUMBER (5) := 3;
    wdword8tablebehavior CONSTANT NUMBER (5) := 0;
    wdword9tablebehavior CONSTANT NUMBER (5) := 1;
    wdautofitcontent CONSTANT NUMBER (5) := 1;
    wdautofitfixed CONSTANT NUMBER (5) := 0;
    wdautofitwindow CONSTANT NUMBER (5) := 2;
    wdunderlinesingle CONSTANT NUMBER (5) := 1;
    ---- wdUnits Class members
    wdcell CONSTANT NUMBER (5) := 12;
    wdcharacter CONSTANT NUMBER (5) := 1;
    wdword CONSTANT NUMBER (5) := 2;
    wdsentence CONSTANT NUMBER (5) := 3;
    wdline CONSTANT NUMBER (5) := 5;
    ---- wdMovementType Class members
    wdextend CONSTANT NUMBER (5) := 1;
    wdmove CONSTANT NUMBER (5) := 0;
    --wdBorderType Class members
    wdborderleft CONSTANT NUMBER := -2;
    wdborderright CONSTANT NUMBER := -4;
    wdbordertop CONSTANT NUMBER := -1;
    wdborderbottom CONSTANT NUMBER := -3;
    --WdLineStyle Class member
    wdlinestylenone CONSTANT NUMBER := 0;
    mytab CONSTANT VARCHAR2 (1) := CHR (9);
    myblue CONSTANT NUMBER (8) := 16711680; --FF0000
    mygreen CONSTANT NUMBER (8) := 65280; --00FF00
    myred CONSTANT NUMBER (8) := 255; --0000FF
    mydkgreen CONSTANT NUMBER (8) := 32768; --008000
    myblack CONSTANT NUMBER (8) := 0; --000000
    mytext VARCHAR2 (2000);
    BEGIN
    happlication := ole2.create_obj ('Word.Application');
    ole2.set_property (happlication
    ,'Visible'
    ,1
    hdocuments :=
    ole2.get_obj_property (happlication, 'Documents');
    hdocument := ole2.invoke_obj (hdocuments, 'Add');
    -------- Create Header and Footer --------
    hwindow :=
    ole2.get_obj_property (happlication, 'ActiveWindow');
    hpane := ole2.get_obj_property (hwindow, 'ActivePane');
    hview := ole2.get_obj_property (hpane, 'View');
    ---- Header Section ---
    ole2.set_property (hview
    ,'SeekView'
    ,wdseekcurrentpageheader
    hselection :=
    ole2.get_obj_property (happlication, 'Selection');
    hfont := ole2.get_obj_property (hselection, 'Font');
    ole2.set_property (hfont
    ,'Name'
    ,'Calibri'
    ole2.set_property (hfont
    ,'Size'
    ,10
    ole2.set_property (hfont
    ,'Bold'
    ,FALSE
    ole2.set_property (hfont
    ,'Color'
    ,myblack
    ole2.RELEASE_OBJ (hfont);
    args := ole2.create_arglist;
    --Below is the location of your jpg file that contains the logo and address
    ole2.add_arg (args, 'C:\temp\AMHeader2.jpg');
    hinlineshapes :=
    ole2.get_obj_property (hselection, 'InlineShapes');
    ole2.invoke (hinlineshapes
    ,'AddPicture'
    ,args
    ole2.destroy_arglist (args);
    ole2.RELEASE_OBJ (hinlineshapes);
    ole2.set_property (hview
    ,'SeekView'
    ,wdseekmaindocument
    ole2.RELEASE_OBJ (hview);
    ole2.RELEASE_OBJ (hpane);
    ole2.RELEASE_OBJ (hwindow);
    -------- Insert Text --------
    hfont := ole2.get_obj_property (hselection, 'Font');
    ole2.set_property (hfont
    ,'Name'
    ,'Calibri'
    ole2.set_property (hfont
    ,'Size'
    ,9
    ole2.set_property (hfont
    ,'Bold'
    ,FALSE
    ole2.set_property (hfont
    ,'Color'
    ,myblack
    ole2.invoke (hselection, 'TypeParagraph');
    hparagraphformat :=
    ole2.get_obj_property (hselection, 'ParagraphFormat');
    ole2.set_property (hparagraphformat
    ,'Alignment'
    ,wdalignparagraphleft
    ole2.RELEASE_OBJ (hparagraphformat);
    print_line (hselection
    , 'Date ' || TO_CHAR (TRUNC (SYSDATE), 'MM/DD/YYYY')
    ,NULL
    print_line (hselection
    ,NULL
    --The following prints the address of the recipient of the letter.
    print_line (hselection
    ,addr_line1
    ,NULL
    print_line (hselection
    ,addr_line2
    ,NULL
    print_line (hselection
    ,addr_line3
    ,NULL
    print_line (hselection
    ,addr_line4
    ,NULL
    print_line (hselection
    ,addr_line5
    ,NULL
    --Call like the one below are to insert blank lines
    hselection :=
    ole2.get_obj_property (happlication, 'Selection');
    print_line (hselection
    ,NULL
    ,NULL
    print_line (hselection
    ,'Your salutation'
    ,NULL
    print_line (hselection
    ,NULL
    ,'NULL
    print_line (hselection
    ,'Ref: '
    ,NULL
    print_line (hselection
    ,NULL
    ,NULL
    print_line
    (hselection
    ,'Whatever text you want to appear on this line.'
    ,NULL
    print_line (hselection
    ,NULL
    ,NULL
    -------- Create Table --------
    htables := ole2.get_obj_property (hdocument, 'Tables');
    hrange := ole2.get_obj_property (hselection, 'Range');
    args := ole2.create_arglist;
    ole2.add_arg_obj (args, hrange); --Range 
    ole2.add_arg (args, 1); --NumRows    The rest of the rows are created later as and when required
    ole2.add_arg (args, 6); --NumColumns This creates a table of 6 columns.
    ole2.add_arg (args, wdword9tablebehavior); --DefaultTableBehavior
    ole2.add_arg (args, wdautofitfixed); --FitBehavior
    htable := ole2.invoke_obj (htables
    ,'Add'
    ,args
    ole2.destroy_arglist (args);
    -- [Borders removal start]The following piece of code removes all the borders. Use of this is optional.
    hborders := ole2.get_obj_property (htable, 'Borders');          
    ole2.set_property (hborders                                        
    ,'OutsideLineStyle'
    ,wdlinestylenone
    ole2.set_property (hborders
    ,'InsideLineStyle'
    ,wdlinestylenone
    ole2.RELEASE_OBJ (hborders);
    --[Borders removal end]
    --The following code makes the cursor enter the table. I took quite some time
    --figuring this out.
    hselection := ole2.get_obj_property (hdocument, 'Tables');
    hselection := ole2.get_obj_property (happlication, 'Selection');
    --WRITE_HEADINGS is the procedure called each time only to write headings.
    write_headings (hselection
    ,'Heading 1 on cell at row 1 column 1'
    ,8
    --The following moves the cursor to the next cell on the right.
    args := ole2.create_arglist;
    ole2.add_arg (args, wdcell);
    ole2.add_arg (args, 1);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveRight'
    ,args
    ole2.destroy_arglist (args);
    write_headings (hselection
    ,'Heading 1 on cell at row 1 column 2'
    ,7
    args := ole2.create_arglist;
    ole2.add_arg (args, wdcell);
    ole2.add_arg (args, 1);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveRight'
    ,args
    ole2.destroy_arglist (args);
    write_headings (hselection
    ,'Heading 1 on cell at row 1 column 3'
    ,7
    args := ole2.create_arglist;
    ole2.add_arg (args, wdcell);
    ole2.add_arg (args, 1);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveRight'
    ,args
    ole2.destroy_arglist (args);
    write_headings (hselection
    ,'Heading 1 on cell at row 1 column 4'
    ,8
    args := ole2.create_arglist;
    ole2.add_arg (args, wdcell);
    ole2.add_arg (args, 1);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveRight'
    ,args
    ole2.destroy_arglist (args);
    write_headings (hselection
    ,'Heading 1 on cell at row 1 column 5'
    ,5
    args := ole2.create_arglist;
    ole2.add_arg (args, wdcell);
    ole2.add_arg (args, 1);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveRight'
    ,args
    ole2.destroy_arglist (args);
    write_headings (hselection
    ,'Heading 1 on cell at row 1 column 6'
    ,8
    --The following moves the cursor back to the first cell on row 1 column 1
    args := ole2.create_arglist;
    ole2.add_arg (args, wdcell);
    ole2.add_arg (args, 6);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveLeft'
    ,args
    ole2.destroy_arglist (args);
    --Now we need to write data sourced from a multi record block in Oracle Forms
    GO_BLOCK ('your_block');
    FIRST_RECORD;
    record_cnt := 0;
    LOOP
    record_cnt := record_cnt + 1;
    ---In my application I gave the choice to the user to put a check mark on those records that he would want to print ------on the document and so the following.
    IF :your_block.cb_print = 'Y'          
    THEN               
    --This creates a new row below the first row that contains the column headers.
    args := ole2.create_arglist; ole2.add_arg (args, 1);
    ole2.invoke (hselection
    ,'InsertRowsBelow'
    ,args
    ole2.destroy_arglist (args);
    --WRITE_DATA is called each time to write the data in the cells.
    write_data (hselection
    , :your_block.item);
    args := ole2.create_arglist;
    ole2.add_arg (args, wdcell);
    ole2.add_arg (args, 1);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveRight'
    ,args
    ole2.destroy_arglist (args);
    write_data (hselection
                   , :your_block.item);
    args := ole2.create_arglist;
    ole2.add_arg (args, wdcell);
    ole2.add_arg (args, 1);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveRight'
    ,args
    ole2.destroy_arglist (args);
    write_data (hselection
                   ,:your_block.item);
    args := ole2.create_arglist;
    ole2.add_arg (args, wdcell);
    ole2.add_arg (args, 1);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveRight'
    ,args
    ole2.destroy_arglist (args);
    write_data (hselection
         ,:your_block.item);
    args := ole2.create_arglist;
    ole2.add_arg (args, wdcell);
    ole2.add_arg (args, 1);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveRight'
    ,args
    ole2.destroy_arglist (args);
    write_data (hselection
         ,:your_block.item);
    args := ole2.create_arglist;
    ole2.add_arg (args, wdcell);
    ole2.add_arg (args, 1);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveRight'
    ,args
    ole2.destroy_arglist (args);
    write_data (hselection
    ,:your_block.item);
    END IF;
    EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
    NEXT_RECORD;
    END LOOP;
    --The following makes the cursor exit the table and back on document for any further
    --writing of text.
    args := ole2.create_arglist;
    ole2.add_arg (args, wdline);
    ole2.add_arg (args, 1);
    ole2.add_arg (args, wdmove);
    ole2.invoke (hselection
    ,'MoveDown'
    ,args
    print_line (hselection           --As mentioned earlier, this enters a blank line.
    ,NULL
    ,NULL
    print_line (hselection
    ,'Boilerplate text: '
    ,your_variable
    print_line (hselection
    ,'Boilerplate text: '
    ,your_variable
    --You can print as many lines as required by making call to the PRINT_LINE procedure.
    ole2.RELEASE_OBJ (htables);
    ole2.RELEASE_OBJ (hfont);
    ole2.RELEASE_OBJ (hselection);
    ole2.RELEASE_OBJ (hdocument);
    ole2.RELEASE_OBJ (hdocuments);
    ole2.RELEASE_OBJ (happlication);
    END;
    PROCEDURE PRINT_LINE
    ( v_sel OLE2.OBJ_TYPE
    , v_text VARCHAR2
    , v_field varchar2)
    IS
    /* This procedure takes in three arguments.
    The first v_sel is the VB selection object.
    v_text is the static or boilerplate text that needs to be printed on the document.
    v_field is the value of the item or variable from the program.
    v_args      OLE2.LIST_TYPE;
    hTab     CONSTANT varchar2(1) := chr(9); --This is the vb constant for tabstop
    BEGIN
    v_args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(v_args, v_text);
    OLE2.INVOKE(v_sel, 'TypeText', v_args);
    OLE2.DESTROY_ARGLIST(v_args);
    --The following replicates tabbing. This was used so that the field values are aligned at a tabstop.
    --When printing a blank line NULL is passed in as the argument
    v_args := OLE2.CREATE_ARGLIST;
         OLE2.ADD_ARG(v_args, hTab);
         OLE2.INVOKE(v_sel, 'TypeText', v_args);
         OLE2.DESTROY_ARGLIST(v_args);
    --The following writes the value of the variable at the tabstop.      
         v_args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(v_args, v_field);
    OLE2.INVOKE(v_sel, 'TypeText', v_args);
    OLE2.DESTROY_ARGLIST(v_args);
    OLE2.INVOKE(v_sel, 'TypeParagraph');
    END;
    PROCEDURE WRITE_HEADINGS (SELIN OLE2.OBJ_TYPE, TEXTIN VARCHAR2, COUNTIN NUMBER)
    IS
    /* This procedure is used to write headings in the first row of the table.
    SELIN is the Selection object
    TEXTIN is the boilerplate text to be written as the header of a column.
    COUNTIN is the number of characters in the header text. This is required
    to replicate the action bolding the font of the header.
    hFont          OLE2.OBJ_TYPE;
    v_args OLE2.LIST_TYPE;
    wdCharacter CONSTANT number(5) := 1; --Default
    --wdUnderline Class members
    wdUnderlineSingle                     CONSTANT NUMBER(5) := 1;
    ---- wdMovementType Class members
    wdExtend CONSTANT number(5) := 1;
    wdMove CONSTANT number(5) := 0; --Default
    ---- WdParagraphAlignment Class members
    wdAlignParagraphCenter CONSTANT number(5) := 1;
    wdAlignParagraphLeft CONSTANT number(5) := 0;
    wdAlignParagraphRight CONSTANT number(5) := 2;
    ---- HexColor = BBGGRR
    myLightBlue CONSTANT number(8) := 16755370; --FFAAAA
    BEGIN
    hFont := OLE2.GET_OBJ_PROPERTY(selin, 'Font');
    OLE2.SET_PROPERTY(hFont, 'Name', 'Calibri');
    OLE2.SET_PROPERTY(hFont, 'Size', 10);
    OLE2.SET_PROPERTY(hFont, 'Bold', True);
    OLE2.RELEASE_OBJ(hFont);
    v_args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(v_args, textin);
    OLE2.INVOKE(selin, 'TypeText', v_args);
    OLE2.DESTROY_ARGLIST(v_args);
    v_args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(v_args, wdCharacter);
    OLE2.ADD_ARG(v_args, countin);
    OLE2.ADD_ARG(v_args, wdMove);
    OLE2.INVOKE(selin, 'MoveLeft', v_args);
    OLE2.DESTROY_ARGLIST(v_args);
    v_args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(v_args, wdCharacter); --Unit
    OLE2.ADD_ARG(v_args, countin); --Count
    OLE2.ADD_ARG(v_args, wdExtend); --Extend
    OLE2.INVOKE(selin, 'MoveRight', v_args);
    OLE2.DESTROY_ARGLIST(v_args);
    hFont := OLE2.GET_OBJ_PROPERTY(selin, 'Font');
    OLE2.SET_PROPERTY(hFont, 'Underline', wdUnderlineSingle);
    OLE2.RELEASE_OBJ(hFont);
    END;
    PROCEDURE WRITE_DATA (SELIN OLE2.OBJ_TYPE, TEXTIN VARCHAR2)
    IS
    /*This procedure writes data in the cells of the table
    hFont     OLE2.OBJ_TYPE;
    v_args OLE2.LIST_TYPE;
    wdCharacter CONSTANT number(5) := 1; --Default
    --wdUnderline Class members
    wdUnderlineSingle                     CONSTANT NUMBER(5) := 0;
    ---- wdMovementType Class members
    wdExtend CONSTANT number(5) := 1;
    wdMove CONSTANT number(5) := 0; --Default
    ---- WdParagraphAlignment Class members
    wdAlignParagraphCenter CONSTANT number(5) := 1;
    wdAlignParagraphLeft CONSTANT number(5) := 0;
    wdAlignParagraphRight CONSTANT number(5) := 2;
    ---- HexColor = BBGGRR
    myLightBlue CONSTANT number(8) := 16755370; --FFAAAA
    BEGIN
    hFont := OLE2.GET_OBJ_PROPERTY(selin, 'Font');
    OLE2.SET_PROPERTY(hFont, 'Name', 'Calibri');
    OLE2.SET_PROPERTY(hFont, 'Size', 10);
    OLE2.SET_PROPERTY(hFont, 'Bold', False);
    OLE2.SET_PROPERTY(hFont, 'Underline', wdUnderlineSingle);
    OLE2.RELEASE_OBJ(hFont);
    v_args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(v_args, textin);
    OLE2.INVOKE(selin, 'TypeText', v_args);
    OLE2.DESTROY_ARGLIST(v_args);
    END;
    Edited by: smilingbandit on 31-Mar-2010 7:05 PM
    Edited by: smilingbandit on 31-Mar-2010 8:23 PM
    Edited by: smilingbandit on Apr 1, 2010 6:14 AM: Reason - Fixed formatting of comments.

  • How to use saveas webarchive in word using OLE2

    Hello,
    I am using the webutil word demo (without webutil) on the client. This demo is working fine.
    Now I like to save the file not as a word document, but as a WebArchive or html file. How can I pass the fileformat argument to the saveas invoke call. Or is there a other way to do this using ole2.
    Below the demo code.
    Thanks in advance,
    Fred.
    DECLARE
    app OLE2.OBJ_TYPE;
    docs OLE2.OBJ_TYPE;
    doc OLE2.OBJ_TYPE;
    selection OLE2.OBJ_TYPE;
    args OLE2.LIST_TYPE;
    BEGIN
    -- create a new document
    app := OLE2.CREATE_OBJ('Word.Application');
    OLE2.SET_PROPERTY (app,'Visible',1);
    docs := OLE2.GET_OBJ_PROPERTY(app, 'Documents');
    doc := OLE2.INVOKE_OBJ(docs, 'add');
    selection := OLE2.GET_OBJ_PROPERTY(app, 'Selection');
    -- insert data into new document from long item
    OLE2.SET_PROPERTY(selection, 'Text', 'this is a test message');
    -- save document as example.tmp
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args, 'c:\example.doc');
    OLE2.INVOKE(doc, 'SaveAs', args);
    OLE2.DESTROY_ARGLIST (args);
    -- close example.tmp
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args, 0);
    OLE2.INVOKE(doc, 'Close', args);
    OLE2.DESTROY_ARGLIST(args);
    OLE2.RELEASE_OBJ(selection);
    OLE2.RELEASE_OBJ(doc);
    OLE2.RELEASE_OBJ (docs);
    Using OLE Commands
    OLE2.INVOKE(app,'Quit');
    END;

    Hi Fred,
    Word's SaveAs() method takes file format as it's second argument. The following code snippet shows how to save as HTML:
      args := OLE2.CREATE_ARGLIST;
      OLE2.ADD_ARG(args, 'c:\example.html');
      OLE2.ADD_ARG(args, 8);
      OLE2.INVOKE(doc, 'SaveAs', args);Eric Adamson
    Lansing, Michigan

  • Create Word Document with OLE2.

    Hi,
    Is it possible to create a word docuent as an attachment? I want to create an attachment for opportunity when its status changes.
    Is it possible to create word document in Actions and can we attach it to opportunity?
    Any suggestions on how to approach for this requirment?
    Regards,

    Mike is not suggesting that you try to invoke a Word macro from OLE2. He is suggesting that you use Word's Macro Recorder to capture the actions you are trying to automate. The resulting macro will be written in VBA, and therefore of no direct use to you. It will, however, show you which objects/methods are relevant to your task. This information will make it much easier to write the equivalent OLE2 code.
    Note that Macro Recorder tends to generate more code than is necessary, by reassigning default values to object properties, to ensure portability. Your OLE2 code can often be left much more brief, by assigning values only to those properties that actually change within your operation.
    Eric Adamson
    Lansing, Michigan

  • OLE2 with MS Word -- Table Handling

    Dear All,
    Im using forms 6i.
    Im generating a word document from forms.
    That word document is a template.
    In that template im placing data at runtime..
    My MS Word template has one table with 6 columns and 15 rows...
    But at runtime i may get data more than 15 rows...
    So whenever start printing 16th row im getting non-oracle exception.
    How to overcome this...
    Im writing data into table cells as followin
    procedure SetCellText (DocumentHandle in OLE2.OBJ_TYPE,
                             ThisTable      in PLS_INTEGER,
                             CellColumn     in PLS_INTEGER,
                             CellRow        in PLS_INTEGER,
                             Text           in VARCHAR2) is                   
        hCell  OLE2.OBJ_TYPE;   
        hRange OLE2.OBJ_TYPE; 
        begin
            hCell := GotoCell(DocumentHandle,ThisTable,CellColumn,CellRow);
            hRange := OLE2.GET_OBJ_PROPERTY(hCell,'Range');
            OLE2.SET_PROPERTY(hRange,'Text',Text);
            OLE2.RELEASE_OBJ(hRange);
            OLE2.RELEASE_OBJ(hCell);
        end;    SetCellText(hRange,1,1,v_row,runtimevalue); Is that possible to insert new row at the end of the table ?

    Thanks InoL.....
    Your Hint Macro did the job...
    I created a Macro In the word template to add new row dynamically...
    Then i Run the Macro from my forms as following..
    =============== Created Macro in word template========================
    Sub AddNewRow1()
    Dim oTable As Table
    Dim oCell As Cell
    Dim oPrevRow As Row, oNewRow As Row
    Dim iColumn As Long
    Set oTable = ActiveDocument.Tables(3)
    Set oPrevRow = oTable.Rows(oTable.Rows.Count)
    oTable.Rows.Add
    Set oNewRow = oTable.Rows(oTable.Rows.Count)
    End Sub
    ===========================================================
    ================ Executing Macro from forms==========================
    ARGS := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args, 'AddNewRow');
    OLE2.INVOKE(application,'Run',args);
    OLE2.DESTROY_ARGLIST(ARGS);
    ============================================================

  • Create a Checkbox in a Word Document (OLE2)

    Hi @all,
    I want to create a WORD Document with ABAP. I created an OLE2 Object and now I want to generate a Checkbox in the WORD Document. My Syntax is the following:
    DATA: o_word TYPE ole2_object.
      CREATE OBJECT o_word 'Word.Basic'.
      CALL METHOD OF o_word 'FileNew'
        EXPORTING
        #1 = 'normal.dot'.
      CALL METHOD OF o_word 'AppShow'.
      CALL METHOD OF o_word 'CHECKBOX'.
    Now my Problem is, that the CheckBox doesn't appear and I really don't have any information about what Parameters the Method 'CHECKBOX' (Word.Basic) needs.
    Can anyone help me to create a CheckBox in a WORD Document and further where I can get some information about what Parameters the Word.Basic Methods need.
    Thanks a lot...
    Christian
    Message was edited by: Christian Kremer

    @ Rich:
    The Macro code to generate a CheckBox manually is:
    ActiveDocument.ToggleFormsDesign
        Selection.InlineShapes.AddOLEControl ClassType:="Forms.CheckBox.1"
    Can I also use Word.Application Objects instead of Word.Basic?
    Because the code I have posted here seems to be the syntax I must use with Word.Application
    Message was edited by: Christian Kremer
    Message was edited by: Christian Kremer

  • How to open word document directly using ole2 and ole containers

    Hello
    i am using ole conatiners....in forms 6i. i want o open word document directly when i click a button....
    i have tried host....ole but word opens .....i want the document to open at once.....
    what should i use /set
    plz tell by host command and ole2 as well
    its urgent.....
    thanks

    Try this code, Hope this will work.
    declare
    item_name varchar2(80) := 'letter';
    item_id item;
    verb_index_str VARCHAR(20);
    verb_index PLS_INTEGER;
    verb_cnt_str VARCHAR(20);
    verb_cnt NUMBER;
    verb_name VARCHAR(20);
    loop_cntr NUMBER;
    begin
    item_id := Find_Item(item_name);
    IF Id_Null(item_id)THEN
              message('No such item: '||item_name);
    ELSE
    verb_cnt_str := Forms_OLE.Get_Verb_Count(item_id);
    verb_cnt := TO_NUMBER(verb_cnt_str);
    FOR loop_cntr in 1..verb_cnt LOOP
    verb_name := Forms_OLE.Get_Verb_Name(item_id,loop_cntr);
    -- message(verb_name);
    -- message(loop_cntr|| ' '||verb_name);
    IF verb_name = 'Open' or Verb_name = '?E?'THEN
    EXEC_VERB(item_id,verb_name);
    END IF;
         end loop;
    end if;
    EXCEPTION
    WHEN OTHERS THEN
    MESSAGE('Error: '||TO_CHAR(SQLCODE)||' '||SQLERRM);
    RAISE FORM_TRIGGER_FAILURE;
    end;

  • OLE2: Calling Microsoft Word from Forms

    I am writing an Forms application which requires me to be able to open a Word template file; then replace the bookmarks in the template with data from an oracle database; then to save and print the Word document.
    I know I can do this using the OLE2 package, but I don't know how to. Does anyone know where I can find a good source of information showing actually how to do it, the standard Oracle documentation is syntax only, I could do with some example code, etc.
    Thanks
    Nik

    Hi there,
    You can take a look at the samples-forms. When you install Forms you can install demos too. One of those demo-forms shows how to use Forms and Word through OLE2. For ths source you can take a look within the FMB file.

  • Ole2 question about inserting document object in Word

    I thought I had it figured out but it doesn't seem to work. From a Oracle Forms 6i application, I want to insert an object(a file) in a word document as an icon.
    The vb code generated when I record the macro of inserting an object as an icon is:
    Selection.InlineShapes.AddOLEObject ClassType:="Word.Document.8", FileName _
    :="string defining the location of the file object", LinkToFile:=False _
    , DisplayAsIcon:=True, IconFileName:= _
    "C:\WINDOWS\Installer\{90110409-6000-11D3-8CFE-0050048383C9}\wordicon.exe" _
    , IconIndex:=1, IconLabel:= _
    "string defining the location of the file object"
    Using this I wrote the following code: ( I am leaving out the declaration of the ole2.obj_type and other variables)
    args := ole2.create_arglist;
    ole2.add_arg (args, 'string defining the location of the file object');
    hinlineshapes :=
    ole2.get_obj_property (hselection, 'InlineShapes');
    ole2.invoke (hinlineshapes
    ,'AddOLEObject'
    ,args
    ole2.destroy_arglist (args);
    holeformat := ole2.get_obj_property (hinlineshapes, 'OLEFormat');
    ole2.set_property (holeformat
    ,'ClassType'
    ,'Word.Document.8'
    ole2.set_property (holeformat
    ,'DisplayAsIcon'
    ,TRUE
    ole2.set_property (holeformat
    ,'IconLabel'
    ,'string defining the location of the file object'
    When I run the code I get the following message from MS Word:
    " This object was created in 'string defining the location of the file object'.
    This application is not available to open this object.
    Make sure the application is properly installed and that it has not deleted, moved or renamed."
    Can someone please help? Thanks in advance.

    Second, when it inserts the date, it makes it an "update automatically" date that updates to the current time every time I open the document
    Sure, that's because you specifically tell it to. Your script inserts a 'new field' which is analogous to Word's dynamic text objects (date, time, page number, etc.)
    Instead, what you want to do is insert an actual string of characters - sure, to you and I that string of characters might look like a date and time, but to Word it's nothing more than a series of characters.
    For that we can fall back on AppleScript's date features, specifically current date, like:
    tell application "Microsoft Word"
      tell selection
        type text text "Left message " & (current date as text)
      end tell
    end tell
    Note that current date as text returns a rather verbose form of the date. If that's too much for you there are alternate options, such as:
    short date string of (current date) & space & time string of (current date)
    which will look more like: "6/10/10 3:26:50 PM"
    But there is also a myriad of other ways (with seconds, without seconds, 12/24 hr, etc.) depending on what you want.
    Third, if possible, I would also like it to be in italics.
    I'll have to look at that one, unless someone else beats me to it.

  • OLE2 from Forms 10g to Microsoft Word 2007 Mail Merge

    We have an Oracle Form that allows the user to print off information on the Form to a Microsoft Word document via OLE2 and mail merging; Forms version is 10.1.2.0.2 as it the version of OAS (from Linux Redhat AS4). This currently works fine if the user has Microsoft Word 2000, but since a recent upgrade to Office 2003 and now in some cases 2007, this functionality doesn't work. The JInitiator Console displays the following error messages:
    Oracle JInitiator: Version 1.3.1.22
    Using JRE version 1.3.1.22-internal Java HotSpot(TM) Client VM
    User home directory = C:\Documents and Settings\jovinc
    Proxy Configuration: Manual Configuration
    Proxy: stpproxy:80
    Proxy Overrides: 172.27*,172.28*,10*,10.*,intranet.fnfis.com*,ljtcapd05.fnfis.com,ukbiprodlx01,ukbiprodlx01.certegy.com,ukbiprodlx02*,ukbiprodlx02.certegy.com*
    JAR cache enabled
    Location: C:\Documents and Settings\jovinc\Oracle Jar Cache
    Maximum size: 50 MB
    Compression level: 0
    c: clear console window
    f: finalize objects on finalization queue
    g: garbage collect
    h: display this help message
    l: dump classloader list
    m: print memory usage
    q: hide console
    s: dump system properties
    t: dump thread list
    x: clear classloader cache
    0-5: set trace level to <n>
    Loading http://ukbiprodlx01.certegy.com:7778/forms/java/frmall_jinit.jar from JAR cache
    Loading http://ukbiprodlx01.certegy.com:7778/forms/java/frmrwinteg.jar from JAR cache
    Loading http://ukbiprodlx01.certegy.com:7778/forms/java/frmwebutil.jar from JAR cache
    Loading http://ukbiprodlx01.certegy.com:7778/forms/java/jacob.jar from JAR cache
    Loading http://ukbiprodlx01.certegy.com:7778/forms/CTYCommonLive/CommonImages.jar from JAR cache
    Loading http://ukbiprodlx01.certegy.com:7778/forms/CTYLogonLive/LogonImages.jar from JAR cache
    Loading http://ukbiprodlx01.certegy.com:7778/forms/CTYXplorerLive/XplorerImages.jar from JAR cache
    proxyHost=null
    proxyPort=0
    connectMode=HTTP, native.
    Forms Applet version is : 10.1.2.0
    2009-Aug-19 11:30:43.785 ERROR>WUO-714 [OleFunctions.setExceptionValues()] Unable to get the last OLE Error details; Exception
    null
    2009-Aug-19 11:30:43.785 ERROR>WUO-707 [OleFunctions.invoke_obj()] Unable to invoke Method: TypeText; Exception
    com.jacob.com.ComFailException: A COM exception has been encountered:
    At Invoke of: TypeText
    Description: Type mismatch.
    2009-Aug-19 11:30:44.848 ERROR>WUO-707 [OleFunctions.invoke_obj()] Unable to invoke Method: Execute; Exception
    com.jacob.com.ComFailException: Invoke of: Execute
    Source: Microsoft Word
    Description: This method or property is not available because the document is not a mail merge main document.
    The below code is used within the Form when they invoke the 'Print' function:
    PROCEDURE PR_print_invoice
    IS
    l_t_application CLIENT_OLE2.OBJ_TYPE;
    l_t_documents CLIENT_OLE2.OBJ_TYPE;
    l_t_source_doc CLIENT_OLE2.OBJ_TYPE;
    l_t_letter_doc CLIENT_OLE2.OBJ_TYPE;
    l_t_merge_doc CLIENT_OLE2.OBJ_TYPE;
    l_t_mail_merge CLIENT_OLE2.OBJ_TYPE;
    l_t_selection CLIENT_OLE2.OBJ_TYPE;
    l_t_args CLIENT_OLE2.LIST_TYPE;
    l_t_args_move_right CLIENT_OLE2.LIST_TYPE;
    l_v_sourcefile VARCHAR2(2000);
    l_v_letter VARCHAR2(2000);
    l_v_mergefile VARCHAR2(2000);      
    l_v_destination_directory VARCHAR2(2000);
    l_v_source_directory VARCHAR2(2000);
    l_n_ok NUMBER;
    l_n_tax NUMBER;
    l_n_total_value NUMBER;
    l_n_total_tax NUMBER;
    l_v_country VARCHAR2(3);     
    l_t_bca_client_address_line1 bill_client_address.bca_client_address_line1%TYPE;
    l_t_bca_client_address_line2 bill_client_address.bca_client_address_line2%TYPE;
    l_t_bca_client_address_line3 bill_client_address.bca_client_address_line3%TYPE;
    l_t_bca_client_address_line4 bill_client_address.bca_client_address_line4%TYPE;
    l_t_bca_client_address_line5 bill_client_address.bca_client_address_line5%TYPE;
    l_t_bca_client_address_line6 bill_client_address.bca_client_address_line6%TYPE;
    l_t_bcl_client_name bill_client.bcl_client_name%TYPE;
    l_t_bcl_client_id bill_client.bcl_client_id%TYPE;
    l_t_trt_rate tax_rate.trt_rate%TYPE;     
    l_t_rli_description_1 reference_list.rli_description_1%TYPE;
    l_n_item_count NUMBER := 0;
    l_b_debug BOOLEAN;
    l_b_ok BOOLEAN;
    l_n_bookmark NUMBER := 0;
    l_n_counter PLS_INTEGER;
    CURSOR l_cur_client( p_ti_bcl_seq_num IN bill_client.bcl_seq_num%TYPE )
    IS
    SELECT bcl_client_id
    , bcl_client_name
    FROM bill_client
    WHERE bcl_seq_num = p_ti_bcl_seq_num
    CURSOR l_cur_client_address( p_ti_bcl_seq_num IN bill_client.bcl_seq_num%TYPE )
    IS
    SELECT bca_client_address_line1
    , bca_client_address_line2
    , bca_client_address_line3
    , bca_client_address_line4
    , bca_client_address_line5
    , bca_client_address_line6
    FROM bill_client_address bca
    , role
    WHERE bca_bcl_seq_num = p_ti_bcl_seq_num
    AND rol_ref_type = 'INVPOINT'
    AND rol_bcl_seq_num = p_ti_bcl_seq_num
    AND rol_bca_seq_num = bca_seq_num
    CURSOR l_cur_items( p_ti_mih_seq_num IN manual_invoice_header.mih_seq_num%TYPE )
    IS
    SELECT mil_tco_seq_num
    , mil_value
    , mil_description
    , mil_quantity
    , rownum
    FROM manual_invoice_line mil
    WHERE mil_mih_seq_num = p_ti_mih_seq_num
    CURSOR l_cur_count_items( p_ti_mih_seq_num IN manual_invoice_header.mih_seq_num%TYPE )
    IS
    SELECT count(*)
    FROM manual_invoice_line
    WHERE mil_mih_seq_num = p_ti_mih_seq_num
    CURSOR l_cur_tax_rate( p_ti_tco_seq_num IN tax_rate.trt_tco_seq_num%TYPE
    , p_ti_mih_invoice_date manual_invoice_header.mih_invoice_date%TYPE )
    IS
    SELECT trt_rate
    FROM tax_rate
    WHERE trt_tco_seq_num = p_ti_tco_seq_num
    AND p_ti_mih_invoice_date BETWEEN trt_effective_date AND NVL( trt_effective_end_date, p_ti_mih_invoice_date )
    CURSOR l_cur_ref_list( p_ti_rli_code reference_list.rli_code%TYPE )
    IS
    SELECT rli_description_1
    FROM reference_list
    WHERE rli_rty_code = 'INTYP'
    AND rli_bcy_seq_num = NVL( :GLOBAL.bcy_seq_num, 1 )
    AND rli_code = p_ti_rli_code
    CURSOR l_cur_country( p_ti_bcy_seq_num bill_country.bcy_seq_num%TYPE )
    IS
    SELECT bcy_short_name
    FROM bill_country
    WHERE bcy_seq_num = p_ti_bcy_seq_num
    PROCEDURE PR_Insert_Cell( p_vi_text IN VARCHAR2 )
    IS
    l_n_bookmark NUMBER := 0;
    BEGIN
    l_n_bookmark := 1;
    l_t_args := CLIENT_OLE2.CREATE_ARGLIST;
    CLIENT_OLE2.ADD_ARG( l_t_args, p_vi_text );
    CLIENT_OLE2.INVOKE( l_t_selection, 'TypeText', l_t_args);
    CLIENT_OLE2.DESTROY_ARGLIST( l_t_args );
    EXCEPTION
    WHEN FORM_TRIGGER_FAILURE
    THEN
    RAISE;
    WHEN OTHERS
    THEN
    PA_lib_msg.PR_others_exception( 'PA_hci_misc.PR_print_invoice.PR_insert_cell', l_n_bookmark );
    END;
    BEGIN
    l_n_bookmark := 1;
    SYNCHRONIZE;
    l_n_bookmark := 2;
    OPEN l_cur_country( :GLOBAL.bcy_seq_num );
    FETCH l_cur_country INTO l_v_country;
    CLOSE l_cur_country;
    -- Determine invoice names and locations and fetch them from the server
    l_n_bookmark := 3;
    l_v_sourcefile := pa_lib_security.fn_fetch_environment( 'ManualInvoiceSourceFile' );
    l_v_letter := pa_lib_security.fn_fetch_environment( l_v_country || 'ManualInvoiceMergeFile' );
    l_v_source_directory := pa_lib_security.fn_fetch_environment( 'SourceManualInvoiceDirectory' );
    l_v_destination_directory := pa_lib_security.fn_fetch_environment( 'DestinationManualInvoiceDir' );
    l_b_debug := ( pa_lib_security.fn_fetch_environment( 'ManualInvoiceDebug' ) = 'Y' );
    l_b_ok := webutil_file_transfer.as_to_client( l_v_destination_directory||l_v_sourcefile, l_v_source_directory||l_v_sourcefile );
    l_b_ok := webutil_file_transfer.as_to_client( l_v_destination_directory||l_v_letter, l_v_source_directory||l_v_letter );
    l_n_bookmark := 4;
    IF ( :SYSTEM.FORM_STATUS = 'CHANGED' )
    THEN
    l_n_bookmark := 5;
    DO_KEY('commit_form');
    END IF;
    l_n_bookmark := 6;
    OPEN l_cur_count_items( :blk_manual_inv_header.mih_seq_num );
    FETCH l_cur_count_items INTO l_n_item_count;
    CLOSE l_cur_count_items;
    IF ( l_n_item_count = 0 )
    THEN
    pa_lib_msg.pr_message_alert( 'STB', -119 );
    RETURN;
    END IF;
    l_n_bookmark := 7;
    SET_APPLICATION_PROPERTY( CURSOR_STYLE, 'BUSY' );
    -- Start Word
    l_n_bookmark := 8;
    l_t_application := CLIENT_OLE2.CREATE_OBJ( 'Word.Application' );
    l_t_documents := CLIENT_OLE2.GET_OBJ_PROPERTY( l_t_application, 'Documents' );
    IF ( l_b_debug )
    THEN
    CLIENT_OLE2.SET_PROPERTY( l_t_application, 'Visible', 1 );
    END IF;
    -- Open source file
    l_n_bookmark := 9;
    l_t_args := CLIENT_OLE2.CREATE_ARGLIST;
    CLIENT_OLE2.ADD_ARG( l_t_args, l_v_destination_directory||l_v_sourcefile );
    l_t_source_doc := CLIENT_OLE2.INVOKE_OBJ( l_t_documents, 'Open', l_t_args );
    CLIENT_OLE2.DESTROY_ARGLIST( l_t_args );
    -- Populate source file with invoice items
    l_n_bookmark := 10;
    OPEN l_cur_client( :parameter.p_bcl_seq_num );
    FETCH l_cur_client INTO l_t_bcl_client_id, l_t_bcl_client_name;
    IF ( l_cur_client%NOTFOUND )
    THEN
    CLOSE l_cur_client;
    pa_lib_msg.pr_message_alert( 'STB', -121 );
    END IF;
    CLOSE l_cur_client;
    l_n_bookmark := 11;
    OPEN l_cur_client_address( :parameter.p_bcl_seq_num );
    FETCH l_cur_client_address INTO l_t_bca_client_address_line1
    , l_t_bca_client_address_line2
    , l_t_bca_client_address_line3
    , l_t_bca_client_address_line4
    , l_t_bca_client_address_line5
    , l_t_bca_client_address_line6;
    IF ( l_cur_client_address%NOTFOUND )
    THEN
    CLOSE l_cur_client_address;
    pa_lib_msg.pr_message_alert( 'STB', -122 );
    END IF;
    CLOSE l_cur_client_address;
    l_n_bookmark := 12;
    OPEN l_cur_ref_list( :blk_manual_inv_header.mih_invoice_type );
    FETCH l_cur_ref_list INTO l_t_rli_description_1;
    IF ( l_cur_ref_list%NOTFOUND )
    THEN
    CLOSE l_cur_ref_list;
    pa_lib_msg.pr_message_alert( 'STB', -123 );
    END IF;
    CLOSE l_cur_ref_list;
    -- Move to first data column
    l_n_bookmark := 13;
    l_t_selection := CLIENT_OLE2.GET_OBJ_PROPERTY( l_t_application, 'Selection' );
    l_t_args_move_right := CLIENT_OLE2.CREATE_ARGLIST;
    CLIENT_OLE2.ADD_ARG( l_t_args_move_right, 12 );
    CLIENT_OLE2.ADD_ARG( l_t_args_move_right, 1 );
    CLIENT_OLE2.ADD_ARG( l_t_args_move_right, 0 );
    FOR l_n_counter IN 1 .. 19
    LOOP
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    END LOOP;
    l_n_bookmark := 14;
    l_n_total_value := 0;
    l_n_total_tax := 0;
    FOR l_r_items IN l_cur_items( :blk_manual_inv_header.mih_seq_num )
    LOOP
    l_n_bookmark := 15;
    OPEN l_cur_tax_rate( l_r_items.mil_tco_seq_num, :blk_manual_inv_header.mih_invoice_date );
    FETCH l_cur_tax_rate INTO l_t_trt_rate;
    IF ( l_cur_tax_rate%NOTFOUND )
    THEN
    CLOSE l_cur_tax_rate;
    pa_lib_msg.pr_message_alert( 'STB', -124 );
    END IF;
    CLOSE l_cur_tax_rate;
    l_n_tax := ROUND( l_r_items.mil_value * ( l_t_trt_rate / 100 ), 2 );
    l_n_total_tax := l_n_total_tax + l_n_tax;
    l_n_total_value := l_n_total_value + l_r_items.mil_value;
    END LOOP;
    l_n_bookmark := 16;
    FOR l_r_items IN l_cur_items( :blk_manual_inv_header.mih_seq_num )
    LOOP
    l_n_bookmark := 17;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( l_r_items.mil_description );
    l_n_bookmark := 18;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( TO_CHAR( l_r_items.mil_quantity ) );
    l_n_bookmark := 19;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( TO_CHAR( l_r_items.mil_value, '99999999.90' ) );
    l_n_bookmark := 20;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    OPEN l_cur_tax_rate( l_r_items.mil_tco_seq_num, :blk_manual_inv_header.mih_invoice_date );
    FETCH l_cur_tax_rate INTO l_t_trt_rate;
    IF ( l_cur_tax_rate%NOTFOUND )
    THEN
    CLOSE l_cur_tax_rate;
    pa_lib_msg.pr_message_alert( 'STB', -124 );
    END IF;
    CLOSE l_cur_tax_rate;
    PR_insert_cell( TO_CHAR( l_t_trt_rate ) || '%' );
    l_n_bookmark := 21;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    l_n_tax := ROUND( l_r_items.mil_value * ( l_t_trt_rate / 100 ), 2 );
    PR_insert_cell( TO_CHAR( l_n_tax, '99999999.90' ) );
    l_n_bookmark := 22;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( TO_CHAR( l_r_items.rownum ) );
    l_n_bookmark := 23;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( UPPER( l_t_rli_description_1 ) );
    l_n_bookmark := 24;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( l_t_bcl_client_name );
    l_n_bookmark := 25;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( l_t_bca_client_address_line1 );
    l_n_bookmark := 26;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( l_t_bca_client_address_line2 );
    l_n_bookmark := 27;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( l_t_bca_client_address_line3 );
    l_n_bookmark := 28;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( l_t_bca_client_address_line4 );
    l_n_bookmark := 29;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( l_t_bca_client_address_line5 );
    l_n_bookmark := 30;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( l_t_bca_client_address_line6 );
    l_n_bookmark := 31;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( TO_CHAR( :blk_manual_inv_header.mih_invoice_date, 'DD/MM/YYYY' ) );
    l_n_bookmark := 32;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    PR_insert_cell( l_t_bcl_client_id );
    l_n_bookmark := 33;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    IF ( :blk_manual_inv_header.mih_invoice_prefix IS NULL )
    THEN
    PR_insert_cell( TO_CHAR( :blk_manual_inv_header.mih_invoice_number, '0000000009' ) || '/' ||
    TO_CHAR( :blk_manual_inv_header.mih_issue_number, '09') );
    ELSE
    IF ( NVL( LENGTH( :blk_manual_inv_header.mih_invoice_prefix), 0 ) = 1 )
    THEN
    PR_insert_cell( :blk_manual_inv_header.mih_invoice_prefix ||
    TO_CHAR( :blk_manual_inv_header.mih_invoice_number, '000000009' ) || '/' ||
    TO_CHAR( :blk_manual_inv_header.mih_issue_number, '09' ) );
    ELSE
    PR_insert_cell( :blk_manual_inv_header.mih_invoice_prefix ||
    TO_CHAR( :blk_manual_inv_header.mih_invoice_number, '00000009' ) || '/' ||
    TO_CHAR( :blk_manual_inv_header.mih_issue_number, '09' ) );
    END IF;
    END IF;
    l_n_bookmark := 34;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    IF ( l_r_items.rownum = 1 )
    THEN
    PR_insert_cell( TO_CHAR( l_n_total_value, '99999999.90') );
    END IF;
    l_n_bookmark := 35;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    IF ( l_r_items.rownum = 1 )
    THEN
    PR_insert_cell( TO_CHAR( l_n_total_tax, '99999999.90' ) );
    END IF;
    l_n_bookmark := 36;
    CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
    IF ( l_r_items.rownum = 1 )
    THEN
    PR_insert_cell( TO_CHAR( l_n_total_value + l_n_total_tax, '99999999.90' ) );
    END IF;
    END LOOP;
    CLIENT_OLE2.DESTROY_ARGLIST( l_t_args_move_right );
    -- Open merge file
    l_n_bookmark := 37;
    l_t_args := CLIENT_OLE2.CREATE_ARGLIST;
    CLIENT_OLE2.ADD_ARG( l_t_args, l_v_destination_directory||l_v_letter );
    l_t_letter_doc := CLIENT_OLE2.INVOKE_OBJ( l_t_documents, 'Open', l_t_args );
    CLIENT_OLE2.DESTROY_ARGLIST( l_t_args );
    -- Do mail merge
    l_n_bookmark := 38;
    l_t_mail_merge := CLIENT_OLE2.GET_OBJ_PROPERTY( l_t_letter_doc, 'MailMerge');
    l_t_args := CLIENT_OLE2.CREATE_ARGLIST;
    CLIENT_OLE2.INVOKE( l_t_mail_merge, 'Execute', l_t_args );
    CLIENT_OLE2.DESTROY_ARGLIST( l_t_args );
    -- Print
    l_n_bookmark := 39;
    l_t_args := CLIENT_OLE2.CREATE_ARGLIST;
    l_t_merge_doc := CLIENT_OLE2.GET_OBJ_PROPERTY( l_t_application, 'ActiveDocument' );
    CLIENT_OLE2.ADD_ARG( l_t_args, 0 );
    CLIENT_OLE2.INVOKE( l_t_merge_doc, 'PrintOut', l_t_args );
    CLIENT_OLE2.DESTROY_ARGLIST( l_t_args );
    -- Cleanup
    l_n_bookmark := 40;
    IF ( NOT( l_b_debug ) )
    THEN
    l_t_args := CLIENT_OLE2.CREATE_ARGLIST;
    CLIENT_OLE2.ADD_ARG( l_t_args, 0 );
    CLIENT_OLE2.INVOKE( l_t_documents, 'Close', l_t_args );
    CLIENT_OLE2.DESTROY_ARGLIST( l_t_args );
    CLIENT_OLE2.INVOKE( l_t_application, 'QUIT' );
    END IF;
    CLIENT_OLE2.RELEASE_OBJ( l_t_selection );
    CLIENT_OLE2.RELEASE_OBJ( l_t_mail_merge );
    CLIENT_OLE2.RELEASE_OBJ( l_t_source_doc );
    CLIENT_OLE2.RELEASE_OBJ( l_t_letter_doc );
    CLIENT_OLE2.RELEASE_OBJ( l_t_merge_doc );
    CLIENT_OLE2.RELEASE_OBJ( l_t_documents );
    CLIENT_OLE2.RELEASE_OBJ( l_t_application );
    l_n_bookmark := 41;
    SET_APPLICATION_PROPERTY(CURSOR_STYLE,'DEFAULT');
    EXCEPTION
    WHEN FORM_TRIGGER_FAILURE
    THEN
    SET_APPLICATION_PROPERTY(CURSOR_STYLE,'DEFAULT');
    RAISE;
    WHEN OTHERS
    THEN
    PA_lib_msg.PR_others_exception('PA_hci_misc.PR_print_invoice',l_n_bookmark);
    END;
    ---------------------------------

    Some questions:
    Which version of office were you using before? 2003?
    Are the data files on a network, or on your local machine? If they are on a network, can you make a copy of one of them on your local machine and try again?
    Can you open the files directly in Excel? What extension do they have (.xls, or something else?) I am wondering whether access to other file types has been left blocked on your machine but is allowed on your colleague's machine.
    Are you just opening the mail merge main document and seeing this message? If so, do you see the same thing if you start with a new document and try to connect to one of these data sources?
    Can you confirm that the message is about Access even though you are trying to connect to an Excel file?
    (Also, office 2007 has some new stuff - that let's you specify that certain folders are "trusted" . I don't think that ever affected MailMerge but it may be as well to make sure that your documents and data sources are in trusted locations).
    Also worth trying to start Word in "Safe mode" - see, e.g. http://office.microsoft.com/en-gb/word-help/work-with-office-safe-modes-HP010140792.aspx
    Peter Jamieson

  • Need help with OLE2 for MS Word

    Hi,
    I am using ole2 to write out from Oracle Form 6i to MS Word.
    I have created a table, and want to remove the top border of one cell in the table. What ole2 script will achieve this?
    I have put in this code but it doesn't work -
    DECLARE
    args                         ole2.list_type;
    hcells                      ole2.obj_type;
    h_borders                ole2.obj_type;
    wdBorderTop            CONSTANT := -1;
    wdLineStyleNone      CONSTANT := 0;
    BEGIN
    -- Code exists to create a table etc and move to the appropriate cell. Once I reach the desired cell I want to remove the top border of the cell. This is what I put in.
    args:= ole2.create_arglist;                                                    
    ole2.add_arg(args, wdBorderTop);
    hcells := ole2.get_obj_property (hselection, 'Cells');
    hborders := OLE2.GET_OBJ_PROPERTY(hcells, 'Borders');
    ole2.invoke (hborders, 'Item', args);
    OLE2.SET_PROPERTY(hborders, 'LineStyle', wdLineStyleNone);
    OLE2.DESTROY_ARGLIST(args);
    END;
    When I look at the VBA code using a macro in MS Word, this is what I get -
    Sub Macro1()
    ' Macro1 Macro
        Selection.Borders(wdBorderTop).LineStyle = wdLineStyleNone
    End Sub
    Can someone help me by giving me the correct code?
    Thanks.

     Apparently that MB does not support Phenom II.  >> K9N SLI V2 CPU support <<
      Phenom II X3 , 720  Product Name
    K9AG Neo2-Digital, K9A2 Platinum, K9A2 CF
    K9A2 Platinum V2, K9A2 Neo-F, K9A2GM-FD / FIH / FIH-S
    K9N2 Diamond, K9N2 SLI Platinum / K9N2 Zilent, K9A2VM-F V2
    K9N2GM-FD, K9N6PGM2-V, K9N2V Neo
    K9N2GM-FIH, DKA790GX Platinum, K9A2GM V3
    K9A2 Neo2, KA790GX, KA780G-M
    KA790GX-M, KA780G, KA780GM-M
    KA780GM, KA780VM, KA780VM-D
    KA780GM2, K9A2VM-FD, 790GX-G65
    790FX-GD70, 770-C35, 770-C45

Maybe you are looking for