Page 1 of 1

Word and OLE

Posted: Mon Jul 13, 2015 12:14 am
by Colin Haig
Hi All

I have an existing word document and I need to insert a table between some existing text

ie

We have please in providing a quotation for

Qty Description Price
-----------------------------------------------------------------------
1 Item 1 $100.00
2 Item 2 $300.00
-------------------------------------------------------------------------

Please note the above price etc etc

Thanks

Colin

Re: Word and OLE

Posted: Mon Jul 13, 2015 3:52 am
by anserkk
Please refer \Fwh\Samples\WordTable.Prg

Regards
Anser

Re: Word and OLE

Posted: Mon Jul 13, 2015 1:40 pm
by Gale FORd
Don't forget to use macro recordings to help understand.
If I don't know how to do something in Excel or Word I just record a macro, do the steps I want, then look at the recorded macro for the VB code they used.

Re: Word and OLE

Posted: Mon Jul 13, 2015 11:32 pm
by Colin Haig
Hi Anser and Gale

Thanks for the replies.

Anser I saw this example before I posted the question but your solution puts the table at the bottom of
the document - I need to insert the table into an existing document - between existing lines on the document.

I was thinking of adding a single row table into the template - finding the table and inserting the data and adding more
rows as needed.

Thanks

Colin

Re: Word and OLE

Posted: Tue Jul 14, 2015 4:40 am
by anserkk
Colin Haig wrote:Hi Anser and Gale

Thanks for the replies.

Anser I saw this example before I posted the question but your solution puts the table at the bottom of
the document - I need to insert the table into an existing document - between existing lines on the document.

I was thinking of adding a single row table into the template - finding the table and inserting the data and adding more
rows as needed.

Thanks

Colin
Try this code :)

Code: Select all

TRY
    oWord := CreateObject("Word.Application")
CATCH
    MsgInfo("Word is not installed in this PC. Unable to continue further")
    Return NIL
END

TRY
    oDoc := oWord:Documents:Open(cWordFileName)  // 5th parameter can be the password
CATCH
    MsgInfo("Unable to open the template file "+cWordFileName)
    oWord:Quit()
    Return NIL        
END

oWord:Visible:=.T.
oDoc:Select()
oSel = oWord:Selection

// Need to insert a table in the Word file with the some details
oRange := oSel:Document:Content
cSrch:="Your text to be searched"

// Search and identify the location in the word file where you need to insert the Table. Use a unique keyword to identify the location
IF AT( cSrch, oRange:Text ) = 0; RETURN .F.; ENDIF

WHILE oRange:Find:Execute( cSrch )
    oRange:Text = ""
    oRange:Collapse( wdCollapseEnd )
ENDDO

// Add a table with required rows and columns
oTable:=oWord:ActiveDocument:Tables:Add(oRange,6,5,wdWord9TableBehavior,wdAutoFitContent)

// Whatever you need to do with the table goes here
WITH OBJECT oTable

   // Set up borders and shading
   // If u don't want borders then set the next 2 lines to .F.
   :Borders:InsideLineStyle:=.T.
   :Borders:OutsideLineStyle:=.T.

   // Shade first row for headings
   :Rows[1]:Shading:Texture = 100

   // Put the heading row text and set alignment
   :Cell(1,1):Range:ParagraphFormat:Alignment:=wdAlignParagraphRight
   :Cell(1,1):Range:InsertAfter("Sl.No")   
   
   
   :Cell(1,2):Range:ParagraphFormat:Alignment:=wdAlignParagraphLeft
   :Cell(1,2):Range:InsertAfter("Details")
   
   .....
   ......
   

   :Columns:Autofit()
END
Hope the above given code will serve your purpose or at least it will put you into the right direction. :)

Regards
Anser

Re: Word and OLE

Posted: Wed Jul 15, 2015 5:27 am
by Colin Haig
Hi Anser

Thanks for you sample - I have now made it work.

Instead of using :Columns:AutoFit()
I used

oTable:Columns(1):Width = oWord:InchesToPoints(.5)
oTable:Columns(2):Width = oWord:InchesToPoints(5)
oTable:Columns(3):Width = oWord:InchesToPoints(1)

Cheers

Colin