一部のテーブルからデータを取得し、単語テンプレートを作成し、そのテンプレートを他のいくつかのファイルと連結する(従来のVB.Net)アプリケーションがあります。Microsoft.Office.Interop.Word.Applicationを作成するときに遅延が発生する
いくつかのマシンでは問題なく動作しますが、1つのクライアントでテンプレートファイルを開くときにWord InteropコードがObject reference not set to an instance of an object
になるという永続的な問題があります(存在し、権限の問題などはありません)。開始-N-停止実行をモーダルダイアログの束をスロー(恐ろしく実装された)デバッグモードで動作
Dim doc As Document
Dim msWord As Microsoft.Office.Interop.Word.Application
msWord = New Microsoft.Office.Interop.Word.Application
' next line throws "Object reference not set to an instance of an object"
doc = msWord.Documents.Add(verifiedTemplateName)
場合、例外がスローされていません。
Dim doc As Document
Dim msWord As Microsoft.Office.Interop.Word.Application
msWord = New Microsoft.Office.Interop.Word.Application
MsgBox("VooDoo coder at work")
' now no exception is thrown
doc = msWord.Documents.Add(verifiedTemplateName)
標準モードで動作しているときに、数秒の遅延が発生した場合、例外はスローされません。
Dim doc As Document
Dim msWord As Microsoft.Office.Interop.Word.Application
msWord = New Microsoft.Office.Interop.Word.Application
Delay(5) ' function that pauses for one second
' now no exception is thrown
doc = msWord.Documents.Add(verifiedTemplateName)
これは、いくつかのマシンで、Word.Applicationをするためにいくつかの時間がかかる、ことを示唆している「スピンアップ。」
しかし、これをトラップするにはどうすればよいのでしょうか。タイムフレームがわいせつなものであればエラーを投げる(いつものように、地元の管轄区域で最もよく決められる)?
また、これは私が見てきただけで示唆したソリューションWordApplication.Documents.Add Method return null?
@ MSDNフォーラムで他のユーザーによって報告された問題では、潜在的な無限ループです:
Document nulldoc = null;
do
{
document = application.Documents.Add(template, newtemplate, documenttype, visible);
Thread.Sleep(100);
}
while (document == nulldoc);
は、より良い解決策はありますこれは愚かな遅れ、またはおそらく無限のチェックループよりも?
関連項目Error when creating an instance of Word in VB.net.同じエラー、同様のコード。解決策はターゲットファイルが存在することを保証することでした(私の場合はそうです)。
ありがとう。私は実際にMarshal.FinalReleaseComObject()を詳細な@ https://blogs.msdn.com/b/yvesdolc/archive/2004/04/17/115379.aspxとして使用しています –