# Reading ('copying') text from RTF document without having to open an editor

## Recommended Posts

Hi!

I have been searching and reading a lot, but get way astray from what I need.

I need something that is very easy to explain but seems hard to do (though I am sure I am merely overlooking that obvious, idiot foolproof, three-line-max solution once again - someone kick me please).

I want to be able to copy-paste the contents of a .RTF file, in which I put a Lotus document first, to a new lotus document.

In fact I now do this:

1 - open RTF file in Wordpad

2 - CTRL-A, CTRL-C

3 - go back to Lotus Notes, make a new e-mail

4 - CTRL-V and send e-mail

Ofcourse this is very easy to accomplish, but it needs to actually open the RTF document in Wordpad. Since what you get when you open an RTF file in Notepad and CTRL-C it, is different for some wordpad settings, it will not do for multiple users.

So I would like to be able to read the RTF format directly from the file somehow, without opening Wordpad. But since I need to put it into the Lotus app from the copypaste buffer, still as RTF format, I can't just FileRead it

/edit: for clarity: this just puts all tags in the RTF file in the e-mail as text (which gets formatted as normal text by Lotus), while copypasting from the Wordpad window does do exactly what I want.

When I search for some info on the forum, I come to all kinds of difficult DLL stuff, of which everybody says its extremely powerful, but I can't imagine manually having to use something called CallBack functions or subclassing multithreads for this (never heard of any of that before) and having to learn how all that .DLL manipulation work is done.

Please tell me I am trying to reinvent the wheel??

Roses are FF0000, violets are 0000FF... All my base are belong to you.

##### Share on other sites

4 weeks later... I guess it's time to *bump*

Roses are FF0000, violets are 0000FF... All my base are belong to you.

##### Share on other sites

That is indeed a very considerate amount of time before a bump

You could create a Rich Text Edit Control presuming you have the file MSCOMCT2.OCX in system32 (standard), and insert the RTF file contents to it, like so:

Create a GUI, then

$oRP = ObjCreate("RICHTEXT.RichtextCtrl.1")$GUIActiveX = GUICtrlCreateObj($oRP, 10, 10, 400, 260); Embedd it in your GUI GUICtrlSetPos($GUIActiveX, 10, 10, 300, 160); position it as required.
$oRP.FileName = "d:\path\to\Test.Rtf"; Could be wrong about the method here. But the problem is as far as I know the RTC does not have an inherent copy to clipboard method. You could check this page for ideas: The other alt. is to use the WORD UDF: #include <Word.au3>$oWordApp = _WordCreate ()
$oDoc = _WordDocOpen ($oWordApp, "d:\path\to\Test.Rtf")
; At this Point you need to Send a CTRL-A (Select All)
; And then a CTRL-C (Copy to Clipboard)
_WordQuit ($oWordApp) ; Code to Activate Lotus Notes ; Send Keys to Create a new e-mail ; Send CTRL-V (Paste RTF) ; Send ALT-S or whaterver Key required to send the e-mail Hope this helps. 4 weeks later... I guess it's time to *bump* #### Share this post ##### Link to post ##### Share on other sites The Word piece could be written like so... #include <Word.au3>$sFilePath = @ScriptDir & "\Test.rtf"

$oWordApp = _WordCreate($sFilePath, 0, 0)
$oDoc = _WordDocGetCollection($oWordApp, 0)
With $oDoc .Select .Selection.Copy EndWith _WordQuit($oWordApp)

##### Share on other sites

Only it doesn't seem to work right. I get the following error:

D:\_AutoIt\_Projects\test.au3 (11) : ==> The requested action with this object has failed.:

.Selection.Copy

.Selection^ ERROR

I tried it with my original .rtf documents... Then I thought I'd test with actual word documents, one in the Word 2003 .doc format and one in the Word 2007 .docx format, but I got the same error.

The exact code I used was:

#include <Word.au3>
$sFilePath = "c:\test.doc"$oWordApp = _WordCreate($sFilePath, 0, 0)$oDoc = _WordDocGetCollection($oWordApp, 0) With$oDoc
.Select
.Selection.Copy
EndWith

_WordQuit($oWordApp)oÝ÷ Ù8^¡¸ÞrÛajØ¬§^o+ayj+uû§rØ¨È¬½©bu©ÝºÆëa¢è!mçºÇ¢|h¶¢YhÂ)àjëh×6$oDoc.Range.insertAfter("This is some text to insert.")
_WordDocSaveAs($oDoc,"c:\Test2.doc") ... then it works as expected (i.e. puts the string behind the already existing document and saves it nicely as a perfectly usable Test2.doc). Am I missing something? /edit: fixed a number of typos that I seem to have made due to anxiety related to an e-mail from an old flame I just received Edited by SadBunny Roses are FF0000, violets are 0000FF... All my base are belong to you. #### Share this post ##### Link to post ##### Share on other sites Can you add _WordErrorHandlerRegister() toward the top of the code. Hopefully we will get a more useful error message. #### Share this post ##### Link to post ##### Share on other sites Thanks... I got the following: >Running:(3.2.12.0) :\_AutoIt\autoit3.exe "D:\_AutoIt\_Projects\test.au3" --> COM Error Encountered in test.au3 ---->$WordComErrorScriptline = 11

----> $WordComErrorNumberHex = 80020006 ---->$WordComErrorNumber = -2147352570

----> $WordComErrorWinDescription = Onbekende naam. /edit: This means 'unknown name' ---->$WordComErrorDescription =

----> $WordComErrorSource = ---->$WordComErrorHelpFile =

----> $WordComErrorHelpContext = ---->$WordComErrorLastDllError = 0+>18:51:02 AutoIT3.exe ended.rc:0

... but I have no idea how that should help me, since I am still very uncomfortable troubleshooting dll and/or object problems... Tnx for your time! Edited by SadBunny

Roses are FF0000, violets are 0000FF... All my base are belong to you.

##### Share on other sites

Try this...

#include <Word.au3>

$sFilePath = "c:\test.doc" _WordErrorHandlerRegister()$oWordApp = _WordCreate($sFilePath, 0, 0)$oDoc = _WordDocGetCollection($oWordApp, 0)$oDoc.Select
$oWordApp.Selection.Copy _WordQuit($oWordApp)

##### Share on other sites

Freakin' perfect! Thanks a lot, this little piece of script you wrote will save me a sh*tload of time!

(Actually I already did write a working script, which opened the rtf documents in wordpad, used Send() to copypaste it, close the wordpad instance, and paste it in Lotus... But that was ugly, slow and error-prone. That's the why of my original enquiry.)

Roses are FF0000, violets are 0000FF... All my base are belong to you.

## Create an account

Register a new account