Winword and OLE

Winword and OLE

Postby Colin Haig » Thu Sep 16, 2010 6:00 am

Hi All

I have office 2010 and would lilke to open a word document and replace some text using
OLE

Can anyone provide a small sample.

Regards

Colin
Colin Haig
 
Posts: 310
Joined: Mon Oct 10, 2005 5:10 am

Re: Winword and OLE

Postby Richard Chidiak » Thu Sep 16, 2010 6:49 am

Colin

This is a sample, the code was originated by Enrico, i adapted it to my needs

HTH

Richard

Code: Select all  Expand view


      TRY
         oWORD := CREATEOBJECT( "word.Application" )
      CATCH
         MSGSTOP("L'Application Microsoft WORD n'est pas installée sur cet Ordinateur !" )
         RETURN NIL
      END

      oDoc = oWord:Documents:Open(CFILE )
      oDoc:Select()
      oSel = oWord:Selection

      WORDREPLACE( oSel, "#nom#", ALLTRIM(DNOM))

      oWord:ActivePrinter = CNAME
      oDoc:PrintOut()
      oDoc:Close( 0 )
   oWord:Quit()

STATIC FUNCTION WORDREPLACE( oSel, cSrc, cRpl )
oSel:Start = 0
oSel:End = -1

WHILE oSel:Find:Execute( cSrc )
     oSel:Range:Text = cRpl
ENDDO
RETURN NIL

 
http://www.cbati.com

Uestudio
Fwh 13.05 Harbour 3.2 MSVC 2013
User avatar
Richard Chidiak
 
Posts: 946
Joined: Thu Oct 06, 2005 7:05 pm
Location: France

Re: Winword and OLE

Postby Colin Haig » Thu Sep 16, 2010 7:21 am

Hi Richard

Thanks for your reply - I get the following error

Error description: Error word.Application:DOCUMENTS/9 'Item' is not a property.: OPEN

Stack Calls
===========
Called from: C:\xHarbour\source\rtl\win32ole.prg => TOLEAUTO:OPEN(0)

All the samples I have found use the same code as you provided.

Regards

Colin
Colin Haig
 
Posts: 310
Joined: Mon Oct 10, 2005 5:10 am

Re: Winword and OLE

Postby Enrico Maria Giordano » Thu Sep 16, 2010 7:39 am

This is an improved version that I'm using currently:

Code: Select all  Expand view
FUNCTION WORDREPLACEALL( oSel, cSrc, cRpl )

    LOCAL oRng := oSel:Document:Content

    IF AT( cSrc, oRng:Text ) = 0; RETURN .F.; ENDIF

    WHILE oRng:Find:Execute( cSrc )
        oRng:Text = cRpl
        oRng:Collapse( wdCollapseEnd )
    ENDDO

    RETURN .T.


EMG
User avatar
Enrico Maria Giordano
 
Posts: 8713
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Winword and OLE

Postby Colin Haig » Thu Sep 16, 2010 9:56 am

Hi All

The document I was trying to open was a docx - I tried a another doc document and
it openned.

Cheers

Colin
Colin Haig
 
Posts: 310
Joined: Mon Oct 10, 2005 5:10 am

Re: Winword and OLE

Postby driessen » Thu Oct 28, 2010 5:30 pm

To me this is a very interesting topic.

But I have 2 more questions.

1. (To Enrico) I tried your example of WordReplace(), but I got an error that the variable WDCOLLAPSEND doesn't exist. Any idea ? The original code, proposed in this topic, is working just fine.

2. How can I search for a character, a word or a sentence, using this idea ?

3. Is there any difference between : DO WHILE ..... ENDDO and WHILE ..... ENDDO ?

Thank you very much in advance.
Regards,

Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.07 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
User avatar
driessen
 
Posts: 1422
Joined: Mon Oct 10, 2005 11:26 am
Location: Genk, Belgium

Re: Winword and OLE

Postby Enrico Maria Giordano » Thu Oct 28, 2010 7:39 pm

driessen wrote:I got an error that the variable WDCOLLAPSEND doesn't exist.


Code: Select all  Expand view
#define wdCollapseEnd 0


driessen wrote:How can I search for a character, a word or a sentence, using this idea ?


Code: Select all  Expand view
IF oRng:Find:Execute( cString )
    // Found!
ENDIF


driessen wrote:Is there any difference between : DO WHILE ..... ENDDO and WHILE ..... ENDDO ?


No.

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8713
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Winword and OLE

Postby driessen » Thu Oct 28, 2010 8:15 pm

Enrico,

Thank you very much for your answer.
Regards,

Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.07 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
User avatar
driessen
 
Posts: 1422
Joined: Mon Oct 10, 2005 11:26 am
Location: Genk, Belgium

Re: Winword and OLE

Postby driessen » Thu Oct 28, 2010 8:44 pm

Enrico,

Maybe just another question.

I noticed that the text is not replaced in de header and footer. Any idea how that can be solved ?

Thanks a lot in advance.
Regards,

Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.07 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
User avatar
driessen
 
Posts: 1422
Joined: Mon Oct 10, 2005 11:26 am
Location: Genk, Belgium

Re: Winword and OLE

Postby Enrico Maria Giordano » Thu Oct 28, 2010 8:55 pm

Code: Select all  Expand view
FUNCTION WORDREPLACERNGALL( oDoc, cSrc, cRpl )

    LOCAL lOk := .F.

    LOCAL oRng

    TRY
        oRng = oDoc:StoryRanges[ 7 ]

        IF AT( cSrc, oRng:Text ) > 0
            WHILE oRng:Find:Execute( cSrc )
                oRng:Text = cRpl
                oRng = oDoc:StoryRanges[ 7 ]
            ENDDO

            lOk = .T.
        ENDIF
    CATCH
    END

    RETURN lOk


EMG
User avatar
Enrico Maria Giordano
 
Posts: 8713
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Winword and OLE

Postby driessen » Thu Oct 28, 2010 11:25 pm

Enrico,

Thanks a lot.

I'll try it out this weekend.
Regards,

Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.07 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
User avatar
driessen
 
Posts: 1422
Joined: Mon Oct 10, 2005 11:26 am
Location: Genk, Belgium

Re: Winword and OLE

Postby driessen » Fri Oct 29, 2010 4:21 pm

Enrico,

I tried you last example. Unfortunately I got an error : Error Word.Application:SELECTION/0 S_OK:STORYRANGES.

Does STORYRANGES need to be defined ? If yes, how ?

Thank you in advance.
Regards,

Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.07 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
User avatar
driessen
 
Posts: 1422
Joined: Mon Oct 10, 2005 11:26 am
Location: Genk, Belgium

Re: Winword and OLE

Postby Enrico Maria Giordano » Fri Oct 29, 2010 7:38 pm

You can't have errors using my sample because the access to StoryRange is enclosed in a TRY/CATCH/END structure.

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8713
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Winword and OLE

Postby driessen » Fri Oct 29, 2010 8:33 pm

Enrico,

You are right. But I tried your example first and noticed that my Word-document wasn't changed at all.

So I did remark the TRY ... CATCH ... END lines. And then that error occurred. To my opinion the reason why my document wasn't changed ?
Regards,

Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.07 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
User avatar
driessen
 
Posts: 1422
Joined: Mon Oct 10, 2005 11:26 am
Location: Genk, Belgium

Re: Winword and OLE

Postby Enrico Maria Giordano » Fri Oct 29, 2010 8:46 pm

Please show a reduced sample of the problem so I can try to fix it.

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8713
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Next

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 106 guests