15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Reading and Writing MS Word files

Harry Hahne -- hahne@epas.utoronto.ca
Thursday, January 18, 1996

I have the need to read a Microsoft Word file and replace certain
tokens in the text with formatted material from my database (this is a
proprietary database written in C++).  I do not care about working
with any imbedded OLE objects, as long as they remain undistburbed
after I modify the Word document.  I do need to include text
attributes such as italics and superscripts however.

Can anyone direct me to information or sample code on how to do this?
I have been browsing the MSDN and there seem to be some ideas about
doing this with Visual basic, but not C/C++ or MFC.  I gather than
Word files are OLE compound documents, but I need more information
about how to manipulate this type of file and the specific details of
Word compound documents.  Any suggestions will be appreciated.

If there is another list or USENET group which would be a good place 
to ask this, please let me know.

Harry Hahne
hahne@epas.utoronto.ca



Mike Blaszczak -- mikeblas@interserv.com
Saturday, January 20, 1996

[Mini-digest: 4 responses]

On Thu, 18 Jan 1996, "Harry Hahne"  wrote:

>I have the need to read a Microsoft Word file and replace certain
>tokens in the text with formatted material from my database (this is a
>proprietary database written in C++).  I do not care about working
>with any imbedded OLE objects, as long as they remain undistburbed
>after I modify the Word document.  I do need to include text
>attributes such as italics and superscripts however.

>Can anyone direct me to information or sample code on how to do this?

You should do this by writing a Word BASIC macro, or by using OLE to drive an 
instance of Word for Windows.

The Word for Windows file format is subject to change!  It will _necessarily_ 
change with each version of Word for Windows.  If, at the slightest whim, the 
Word developers think a different file format would be smaller, faster, or 
more robust, they'll change the format.  The file format will almost 
necessarily change with each version of Windows.  Word for Windows bases its 
file format on OLE storage mechanisms, which are defined by the system.  If 
the system changes the way OLE storage works, the file format will change.

If you still want to meddle where you don't belong, you should write to 
Microsoft Developer Support and ask for the "Office File Format".  You'll 
need to explain why you want this format, and why normal programmatic 
interfaces (which Microsoft has spent millions developing, testing, and 
documenting) for the products aren't good enough for you.  You'll then need 
to sign an non-disclosure agreement, and probably a couple of other 
documents.  You'll then, maybe, be sent the documentation for the format.

Information on this service can be found in the Microsoft Knowledge 
Base--apparently, you should _search_ instead of just browsing.  If you still 
can't find the article, please let me know and I'll post it here.

.B ekiM
--
TCHAR szDisc[] = _T("These words are my own; I do not speak for Microsoft.");

-----From: Chris Krahe 

It sounds like you may want to control Word through its OLE automation
server, Word.Basic.

To get started, obtain a copy of the Word type library (.tlb) appropriate
for your version of Word (if you need this file for Word 6.0a, email me
directly).  Then, create a new class with ClassWizard from this file, naming
it something like "CWordBasic" or whatever.  ClassWizard creates your
CWordBasic as a descendant of COleDispatchDriver.  You may want to remove
the ExitWindows member function as it confuses the compiler about the macro
by the same name.

In your project, be sure you have oledisp.h included (usually in stdafx.h)
and be sure you call AfxInitOle, usually from your CWinApp's InitInstance().
Instantiate a CWordBasic object and call its CreateDispatch member, passing
"Word.Basic".

You are now ready to drive Word.

If you are familiar with WordBasic, the rest should be easy.  If not, look
at the Word Developer's Kit, included on the Developer's CD if you have it.
You can also learn by recording/writing macros in Word itself.

Hope this has been helpful...

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Chris Krahe, ckrahe@clark.net
  http://www.clark.net/pub/ckrahe
  http://www.kcm-inc.com (my employer)
 "A car does not the driver make", cpk`88
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-----From: csampale@exis.com

There is now a library that allows your program to access compound 
documents relatively easily (much more easily than rolling your own 
stuff). I believe it comes as an OLE control, so it's usable from  
anything which can embed an OLE control...

I don't remember exactly which magazine I read about it, but it was a 
very recent issue. It was in either the recent columns PC Mag had on 
available controls (spread out over two months), Dr. Dobbs, or 
Windows Programmer Journal...

-----From: gtran@ix.netcom.com (Nam H. Tran )

Try to look for Don Box's article (in the OLE Q&A section) in MSDN (at 
least from the July '95 edition).  It helped me plenty in terms of 
creating an OLE client to Word Basic using Visual C++ and MFC.

Gus Tran
gtran@ix.netcom.com




| Вернуться в корень Архива |