問題タブ [jacob]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ProgID とファイル拡張子の関係
JACOB プロジェクト (JAva COm Bridge) を使用したプログラムに取り組んでいます。
開くファイルがあり、名前全体が渡されます (例: c:\test\test.xls)。JACOB が新しい ActiveXComponent を作成するには、ProgID または CLSID を渡す必要があります。(Excel.Application や Word.Application などですが、MS 領域の外には Autocad.Application などもあります)
では、ファイル拡張子または MIME タイプを特定の ProgID または CLSID に関連付けるにはどうすればよいでしょうか。Win32_ProgIDSpecification に参加できる別のデータベースはありますか? Win32_ProgIDSpecification にはすべての ProgID があります。
java - JACOB (Java/COM/ActiveX) - イベント処理のトラブルシューティング方法は?
JACOB を使用して COM オブジェクトと対話しようとしています。
オブジェクトで初期化メソッドを呼び出す (およびそのプロパティを取得する) ことはできましたが、イベントを取得できません。以下にコードを引用します。
同じオブジェクトからイベントを正常に受信するサンプル HTML+Javascript ページ (IE で実行) があります。
次のオプションを検討していますが、具体的なトラブルシューティングのアイデアをいただければ幸いです...
私の Java プログラムを COM オブジェクトを開発したチームに送り、彼らの側で疑わしいものを探してもらいます (オブジェクトには、そのイベントをリッスンしているクライアントがいるかどうか、およびイベントが正常に配信されたかどうかを知る方法がありますか?)
JACOB のネイティブ部分に入り、その側でデバッグしてみてください。私の C++ は錆びていて、Windows 用にプログラミングしたことがないことを考えると、これは少し怖いことです。
java - 「com.jacob.com.ComFailException: モニカーが見つかりません」なぜですか?
私は jacob の最新バージョンと jacobgen を使用しています。
必要なすべてのdllを入れますc:\windows\system32
jacobgen で dll のラッパーを生成しました。
しかし、私は例外を得ました。Google は役に立ちませんでした。:(
Windowsレジストリにregisty dllが必要な場合がありますか?
java - Java、Jacob、および Microsoft Outlook イベント: 「イベント iid が見つかりません」というエラーを受け取る
Jacobライブラリ(COMとJavaのブリッジ)を使用してMicrosoft Outlookと対話するJavaプログラムを作成しています。このプログラムは、新しいMailItemを作成し、そのInspectorウィンドウをユーザーに表示します。ユーザーがいつメール項目の編集を終了したかを知るために、インスペクターのClose イベントをサブスクライブしたいと考えています。
イベントにサブスクライブするには、Jacob のドキュメント(ページの約2/3下)の指示に従いました。
WithEvents
現在の [イベント] モデルは、概念的には Visual Basic の構造に似ています。基本的に 、ソース オブジェクト ( 型) とターゲット オブジェクト (任意の型) をcom.jacob.com.DispatchEvents
受け取るコンストラクターを持つ というクラスを提供します。com.jacob.com.Dispatch
ソース オブジェクトはそのインターフェイスを照会され、 そのデフォルト ソース インターフェイスIConnectionPointContainer
の を取得しようとし ます (これは から取得します)。同時に、デフォルトのソース インターフェイスの DISPID から実際のメソッド名へのマッピングも作成します。次に、メソッド名を使用して 、ターゲット Java オブジェクトからハンドルを取得します。 現在、すべてのイベント メソッドは同じシグネチャを持っている必要があります。バリアントの Java 配列である 1 つの引数と、void の戻り値の型です。IConnectionPoint
IProvideClassInfo
jmethodID
InspectorEventHandler
Jacobのドキュメントに準拠した私のクラスは次のとおりです。
InspectorEventHandler
そして、このクラスを使用してイベントをサブスクライブする方法は次のとおりです。
ただし、最後の行は次の例外で失敗します。
Google によると、他にもいくつかこのエラーが発生しています。残念ながら、いずれも回答を受け取っていません。
この問題を防ぐと主張する Jacob ライブラリのバージョン 1.7 を使用しています。
バージョン 1.7 には、タイプ ライブラリを progid から直接読み取るためのコードも含まれています。これにより、Microsoft Office アプリケーションのすべてのイベントと IE5 のイベントを操作できるようになります。例については、samples/test/IETest.java の例を参照してください。
IETest.java
前述のファイルが次のようなイベントにサブスクライブしていることに気付きました。
したがって、同様の方法でイベントをサブスクライブしようとしました。
これらの試みはすべて同じエラーで失敗しました。
java - JACOB(Java)でWord文書を保存する
簡単なJavaプログラムを作成して、既存のWord文書を開き、何かを変更して、それを.htmlファイルとして保存しようとしています。
動作していない部分は、.htmlとして保存することです。問題は、htmlファイルを取得したのですが、名前が変更されたdocファイルにすぎないことです。したがって、実際には、私が使用できる.htmlファイルではありません。
これは私がグーグルで見つけたものです:
htmlファイルを出力として取得するにはどうすればよいですか?
前もって感謝します。
java - RMS および Websphere 6.1 32 ビットの問題
私は Websphere と RMS で問題に直面しています。私が持っているものは次のとおりです。
- Windows 2003、sp2、64 ビット、エンタープライズ エディション。
- マイクロソフト オフィス ワード 2003 SP3.
- マシンはドメインに接続されており、ドメイン ユーザー (電子メール アドレスを使用) でログインしました。
- RMS クライアントがインストールされています。
- Word自体から適用しようとすると、RMSは正しく機能します。
- Websphere v6.1 (6.1.0.21)、32 ビット、Java バージョン: IBM J9 VM (ビルド 2.3、J2RE 1.5.0 IBM J9 2.3 Windows Server 2003 x86-32 j9vmwi322 3ifx-20080811 (JIT が有効)。
私はJACOBライブラリを使用してMSワードを自動化しようとしており、jacob dll(32)をsystem32フォルダーに割り当て、MS Wordを開き、MSワードファイルを開いて自動化を行うスタンドアロンのJavaクライアントを作成しました( text-replaceing)、この Java クライアントは正しく動作し、COM アプリケーション (MS Word) を正しく呼び出すと、すべて問題ありません。その後、RMS XML テンプレート ファイルのパスを渡すメソッド「 ApplyPolicy 」を呼び出して、word ドキュメントに RMS ポリシーを追加することで、このクライアントを改善しようとしました。このクライアントを試してみましたが、正しく動作しています。
その後、私はそのクライアントを改善し、それを Web プロジェクトに変換し、Websphere 6.1 にデプロイしようとしました (Websphere 自体の /bin ディレクトリ内に JACOB dll を配置して、Websphere で JACOB ライブラリを構成した後)。しかし、その前に「ApplyPolicy」呼び出しを削除して試してみたところ、正しく機能し、MS Word ファイルが開かれ、テキストが置き換えられ、結果ファイルが正しく保存されました。その後、「ApplyPolicy」の呼び出しを復元して試してみましたが、サーバーがハングアップし、ページがロードされたままになり、TASK マネージャーを使用してプロセスを確認したところ、プロセス WINWORD.exe が存在することがわかり、実行しようとするとそれを殺すと、サーバーは戻ってきて、そのログにエラーを出力しました ( A COM 例外が発生しました: At Invoke of: ApplyPolicy 説明:)。
調べてみると、スタンドアローンのJavaアプリを実行してタスクマネージャーを開くとjava.exe *32プロセスとwinword.exe *32プロセスがあったのですが、Webアプリに変換してから実行するとWebsphere内でタスクマネージャーを確認すると、すでにプロセスjava.exe * 32(サーバーの起動時に開始)があり、ページを呼び出すと、winword.exe(32なし)プロセスが作成されてハングし、その結果、サーバーもハングアップしました。だから私を助けてください、どんな助けも大歓迎です。
java - Office 2007 は、サービスから JACOB を介して呼び出されたときにファイルを開くことができません
JACOB を使用して、Java から PowerPoint やその他の Office アプリケーションへの COM 呼び出しを行っています。特定の Windows 7 ボックスで、次のメッセージが頻繁に表示されますが、常にではありません。
エクセルから私は得る:
Wordエラーは次のとおりです。
以下は私が実行しているものです。エラーは最後の行から来ています。
Open 呼び出しを実行する直前にブレークポイントを配置しようとしましたが、ファイルはそこにあり、実際には GUI で PowerPoint で開くことができますが、ステップすると例外がスローされます。
この問題の厄介な点は、最初は継続的に発生しているように見えることですが、しばらく突っついた後 (同じコードを再実行)、最終的には正常に完了し、その後は二度と発生しません。
さらに調査したところ、これは .ppt、.doc、および .xls ファイルでのみ発生し、.pptx、.docx、および .xlsx では発生しないことがわかりました。そして、私が知る限り、それはファイルシステムに関連していません(ファイルをコピーするメカニズムを交換し、ファイルを別のファイルシステムに配置しようとしました)。
catalina.bat start
これは、コマンドラインから実行したときではなく、Java アプリケーションがサービスとして実行されているときにのみ発生することに気付きました。
java - 開いている Excel ファイル (ワークブック) のリストを Java から取得する
MS Excel を Java アプリケーションに統合する際に問題があります。私は Jacob を使用して COM API 経由で Excel と通信していますが、通常は正常に動作します。XLS ファイルはアプリケーションから開くことができ、変更は適切に保存されます。
しかし、Excel が既に開いていて、少なくとも 1 つのワークブックがメモリ内で変更されているが、まだ保存されていない場合、コードにバグがあることに気付きました。このような単純なステートメントは、例外で失敗します。
ワークブック コレクションについてはほとんど何もしません。新しいワークブックを追加したり、そのサイズを数えたりするだけです。これは本当に何とかなるはずです。
私は何かが恋しいですか?
java - JACOBを使用してOffice2010でPOIを使用して生成されたExcelスプレッドシートを開く際の問題
職場では、2つのExcelスプレッドシート(1つはテンプレートとして機能し、もう1つはデータソースとして機能する)を使用する、非常に古いが安定したアプレットがあります。テンプレートはExcelでユーザーが作成しますが、データソースはWebアプリケーションでPOIを使用して作成されます。アプレット内では、次の方法を使用して、両方のスプレッドシートがJava / COMブリッジ(JACOB)を介して開かれます。
アプレットログとhs_err_pidファイルから、テンプレートシートがJACOBによって正常に開かれていることがわかりますが、データシートはDispatch.callで失敗します。
hs_err_pidファイルから:
この問題は、Office2010でのテスト以降にのみ発生しています。
ここ数年で移行したPOI2.5.1とJACOB1.9を使用しているので、アップグレードしてみようと思いますが、プロジェクトとOffice2010のどちらにも既知の問題があるかどうかを知りたいです。POI3.x OOXMLをサポートするため、コードは以前のOfficeバージョンとの下位互換性を維持する必要があるため、HSSFを使用した生成に固執することをお勧めします。
java - Java/JaCoB を使用して 32 ビット COM クライアントをアウトプロセス 64 ビット サーバーと通信させる
この質問は、サーバーがアウトプロセスである場合、32 ビット COM クライアントが 64 ビット COM サーバーと通信できること (およびその逆) が可能であることを示しています。Java Com Bridge (JaCoB) ライブラリを使用して、この方法でサードパーティのアウトプロセス サーバーと通信するクライアントを実装しようとしています。私が使用しているテスト コードは、プロセス アーキテクチャ (32 ビットから 32 ビット、または 64 ビットから 64 ビット) と一致する場合は成功しますが、次の例外を伴うクロス コンビネーションでは失敗します。
何か案は?
アップデート
例外をデバッグした後、根本的な COM エラーはDISP_E_BADCALLEEであると確信しています。Web を掘り下げた結果、考えられる原因は無効なメソッド シグネチャであることが判明したため、詳細を以下に示します。Execute
COM サーバーは MATLAB で、 メソッドとメソッドを呼び出そうとしていQuit
ます。これらの COM タイプ シグネチャは次のとおりです (OLEView から)。
BSTR _stdcall Execute([in] BSTR 名);
void _stdcall Quit();
そして、ここに私のテストコードがあります: