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
-
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 WalkerHi 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 -
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
nullWith 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.....
thanksTry 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
NikHi 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
-
Is Skip logic available for Payment processing using Paypal?
Is Skip logic available for Payment processing using Paypal? i.e. Conditionally i would like to enable paypal option based on user choice as either credit or check.
-
Compose Applicatio​n Icon brings up call options instead of texting options
From the home screen on my BlackBerry Curve 8330, I open the "Compose" icon and select the contact (from my address book) that I want to text message. Sometimes, a message box will come up asking "SMS text which number?", sometimes it will ask "Call
-
Ink low lights on the Officejet Pro K550
I have this officejet pro k550 in which some lights went on indicating I'm running low on ink in some of the color cartridges. I replaced all the cartridges and the lights didn't go out. Now I look at "utilites" (on my Mac computer) and it says tha
-
Conflict between MediaSource Organizer and ZM Media Explorer when ripping tra
I don't know if this is a known problem or not but I am hoping someone can explain what I am seeing here. I have both MediaSource Organizer and ZM Media Explorer set to rip CD tracks at 60% quality with a Variable Bit Rate. If I rip tracks using Medi
-
I just transferred to my moms old iPhone. I made a new Apple ID but when info to apps I cannot get them due to the fact that my moms credit cards is being declined