Difference between revisions of "Office Automation"
Line 4: | Line 4: | ||
== Using the OpenOffice UNO Bridge == | == Using the OpenOffice UNO Bridge == | ||
− | OpenOffice has language bindings for C++ and | + | OpenOffice has language bindings for C++, Java and Python and on Windows OpenOffice can also be manipulated via COM Automation (see below), but there is currently no easy way of using UNO (Universal Network Objects) from Object Pascal on OS X and Linux. If you're interested in developing an OO "bridge" for Pascal, please refer to these links for more information (caution: these links are quite techie in true Sun fashion): |
[http://api.openoffice.org/ api.openoffice.org] | [http://api.openoffice.org/ api.openoffice.org] | ||
Line 61: | Line 61: | ||
</PRE> | </PRE> | ||
− | Here's a simple example of how to open a document with your program using the Word Automation server. Note that this works only on Windows and | + | Here's a simple example of how to open a document with your program using the Word Automation server. Note that this example works only on Windows and only when compiled with Delphi; Free Pascal 2.2.2 can now compile the code but running it does not work. Please check back later or test with a future version of FPC. |
<PRE> | <PRE> | ||
program TestMsOffice; | program TestMsOffice; | ||
Line 108: | Line 108: | ||
---- | ---- | ||
− |
Revision as of 01:13, 1 January 2009
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
italiano (it) │
русский (ru) │
中文(中国大陆) (zh_CN) │
The ability to interact with office software and generate spreadsheets, text documents and presentations from code can be invaluable in the office, and win a lot of time for those that can do it. One example of this is the creation of applications that can read files in an arbitrary format and output an Excel file, a task much more efficient to be done with code then manually.
Using the OpenOffice UNO Bridge
OpenOffice has language bindings for C++, Java and Python and on Windows OpenOffice can also be manipulated via COM Automation (see below), but there is currently no easy way of using UNO (Universal Network Objects) from Object Pascal on OS X and Linux. If you're interested in developing an OO "bridge" for Pascal, please refer to these links for more information (caution: these links are quite techie in true Sun fashion):
Using COM Automation to interact with OpenOffice and Microsoft Office
Automation is unique to Windows so the following two examples won't work on OS X or Linux. For those platforms, please refer to Making do without Windows COM Automation. If you only need to create and/or view a word processing document from your program, take a look at the XDev Toolkit.
Here's a simple example of how to open a document with your program using the OpenOffice Automation server. Note that this works only on Windows.
program TestOO; {$IFDEF FPC} {$MODE Delphi} {$ELSE} {$APPTYPE CONSOLE} {$ENDIF} uses SysUtils, Variants, ComObj; const ServerName = 'com.sun.star.ServiceManager'; var Server : Variant; Desktop : Variant; LoadParams : Variant; Document : Variant; TextCursor : Variant; begin if Assigned(InitProc) then TProcedure(InitProc); try Server := CreateOleObject(ServerName); except WriteLn('Unable to start OO.'); Exit; end; Desktop := Server.CreateInstance('com.sun.star.frame.Desktop'); LoadParams := VarArrayCreate([0, -1], varVariant); {Create new document} Document := Desktop.LoadComponentFromURL('private:factory/swriter', '_blank', 0, LoadParams); TextCursor := Document.Text.CreateTextCursor; {Insert existing document} //Substitute your path and doc TextCursor.InsertDocumentFromURL('file:///C|/my/path/mydoc.doc', LoadParams); end.
Here's a simple example of how to open a document with your program using the Word Automation server. Note that this example works only on Windows and only when compiled with Delphi; Free Pascal 2.2.2 can now compile the code but running it does not work. Please check back later or test with a future version of FPC.
program TestMsOffice; {$IFDEF FPC} {$MODE Delphi} {$ELSE} {$APPTYPE CONSOLE} {$ENDIF} uses SysUtils, Variants, ComObj; const ServerName = 'Word.Application'; var Server : Variant; begin if Assigned(InitProc) then TProcedure(InitProc); try Server := CreateOleObject(ServerName); except WriteLn('Unable to start Word.'); Exit; end; {Open existing document} //Substitute your path and doc Server.Documents.Open('c:\my\path\mydoc.doc'); Server.Visible := True; {Make Word visible} end.
Using the Free Pascal Spreadsheet Library
Another way to automate repetitive work with spreadsheets is to generate the file using the FPSpreadsheet library. This method doesn't require having any external application installed on the machine and several formats are supported.
Writing an Excel file using ADO
please write me.
External links
- Excel file format description on the OpenOffice website