仕事のために、異なるオペレーティングシステムで動作する無料のメカニズムを使用して、Excelからデータをロードおよびアンロードするメカニズムを開発する必要がありました。
なぜなら Linuxでサービスが動作する必要があったため、OLEを介した相互作用のメカニズムは適切ではありませんでした。
実装には、C ++経由でAPIに直接アクセスできるOpenOfficeが選択されました。
ドキュメントは非常に乏しいことが判明し、OLEを介さない作業の例はほとんどありませんでした。 そこで、すべての研究をハブに関する1つの記事にまとめることにしました
記事のサンプルアウトライン:1. C ++を介したOpenOffice APIの使用開始
1.1。 ヘッダー生成
1.2。 RDBタイプファイルの生成
1.3。 Visual Studio 2008のセットアップ
1.4。 ダイナミックdllを作成する
2.プログラムでDLLを再利用する
2.1。 小さなデータアップロードプログラムの例
原則として、DLLに十分な機能がある場合は、手順1を繰り返す必要はありません。
1. C ++を介したOpenOffice APIの使用開始
このセクションは、オフィスwiki:
wiki.services.openoffice.org/wiki/SDKInstallationで詳細に説明されています。
APIの使用を開始するには、
download.services.openoffice.org / files / stableアドレスからSDKをダウンロードする必要があります。 SDKのバージョンが、インストールされているオフィスのバージョンと一致していることが重要です。
SDKを任意のディレクトリにインストールします。
補助ユーティリティgnu make、zipをインストールします(必要な場合)
1.1。 ヘッダー生成
SDKを含むディレクトリ内に、別のバッチファイルを生成するsetsdkenv_windows.batバッチファイルがあります。
質問に答えることでそれを実現します。
環境変数が設定されたバッチファイルが生成されます。
コンソールを開き、生成されたバッチファイルを実行し、同じ準備されたコンソールで特定のバージョンのオフィス用のヘッダーファイルを生成します。
生成チーム:cppumaker -Gc -BUCR -O "c:\Program Files\OpenOffice_SDK\sdk\inludecpp" "c:\Program Files\OpenOffice.org 3\URE\misc\types.rdb" "c:\Program Files\OpenOffice.org 3\Basis\program\offapi.rdb"
どこで
c:\ Program Files \ OpenOffice_SDK \ sdk \ inludecpp-生成するフォルダー
c:\ Program Files \ OpenOffice.org 3 \-オフィスへのパス
1.2。 RDBファイルタイプの生成。
また、開始するには、ご使用のオフィスのバージョン専用のRDBファイルを生成する必要があります。
RDBファイルは、OpenOfficeの特定のバージョンのタイプとインターフェースの説明を含むファイルのようなものです。
これは次のコマンドで実行されます。"C:\Program Files\OpenOffice.org 3\URE\bin\regmerge" "d:\oo\OOAPI\Debug\OOAPI.rdb" / "c:\Program Files\OpenOffice.org 3\URE\misc\types.rdb"
C:\ Program Files \ OpenOffice.org 3 \はオフィスへのパスです
d:\ oo \ OOAPI \ Debug \-ファイルが生成されるパス
その後、コマンドで登録します:"C:\Program Files\OpenOffice.org 3\URE\bin\regcomp" -register -r "d:\oo\OOAPI\Debug\OOAPI.rdb" -c connector.uno.dll
"C:\Program Files\OpenOffice.org 3\URE\bin\regcomp" -register -r "d:\oo\OOAPI\Debug\OOAPI.rdb" -c remotebridge.uno.dll
"C:\Program Files\OpenOffice.org 3\URE\bin\regcomp" -register -r "d:\oo\OOAPI\Debug\OOAPI.rdb" -c bridgefac.uno.dll
"C:\Program Files\OpenOffice.org 3\URE\bin\regcomp" -register -r "d:\oo\OOAPI\Debug\OOAPI.rdb" -c uuresolver.uno.dll
1.3。 Visual Studio 2008のセットアップ
ヘッダーファイルと以下を含めます。
ツール->オプション->プロジェクト-> VC ++ディレクトリ->ファイルを含める
生成されたヘッダーファイルを含むフォルダーを追加します:<oo_sdk_path> \ inludecpp
ツール->オプション->プロジェクト-> VC ++ディレクトリ->ライブラリファイル
<oo_sdk_path> \ libディレクトリを追加します
ツール->オプション->プロジェクト-> VC ++ディレクトリ->実行可能ファイル
<office_programm_dir> \プログラムディレクトリを追加します
プロジェクトのプロパティ:
構成を「すべての構成」に変更します
追加のライブラリを追加
[プロパティ]-> [リンカー]-> [追加オプションのComandLine]
いずれかを追加します:
isal.lib icppu.lib icppuhelper.lib isal.lib isalhelper.lib ireg.lib irmcxt.lib stlport_vc71.lib
すべては、オフィスで作業するためのコンソールプログラムを作成する準備ができています。
1.4。 ダイナミックdllを作成する
多くの便利な例がここにあります:
wiki.services.openoffice.org/wiki/Calc/API/ProgrammingDLLの作業計画は次のようなものです。
-プログラムの開始時に、RDBファイルの可用性を確認し、存在しない場合は生成が行われます。
接続、genRdb関数コンピューターの管理者権限がない場合は、オフィスの一般的なバージョン用にRDBを事前に生成することをお勧めします。
-OpenOfficeサーバーを起動し、リッスンするポートを設定します
startServer、オフィスサーバーのアドレスは、getOOPath関数によってレジストリから認識されます。-プログラムはオフィスサーバーに接続します
-新しいオフィスフレームが作成されます。新しいファイルまたはxlsファイルがインポートされます。
-その後、コンテンツを管理するコマンドを送信できます
-xlsファイルをディスクにエクスポート
関数exportToUrl-逆のメカニズムも可能です:imopt xls file and reading data from it
関数getVal、getTextDLLコードを囲み、十分なコメントがあることを願っています。 完全なプロジェクトは
こちらからダウンロードでき
ます 。
ooapi.h:
ooapi.cpp: #include "stdafx.h"
最終チャット:DLLを使用してExcelでロードおよびアンロードします。