.xlsx ファイルを使用して Excel エクスポート機能を実行しています。時折、Excel ファイルをロードするときに System.Runtime.InteropServices.Marshal.BindToMoniker() メソッドを使用します。問題のファイルが開いていないが存在する場合、次の結果が得られます。
Excel は起動しますが、ブックは読み込まれず、ワークシートも読み込まれません。Excel が空白で表示されます。
エクスポートを実行するプログラムの外部でファイルを開くと、まったく同じ方法で読み込まれます。Excel が開いていて、ウィンドウの上部に Microsoft Excel と表示されていますが、シートが表示されていません。Excel は何も開いていないように見えます。
オプションに入ると、開いているブックがないことも示されます。Notepad ++で開くとわかるように、ファイルには間違いなくコンテンツがありますが、ドキュメントにはワークブックにシートがあることを確認するのに十分な詳細がありますが、何も表示されません。
この破損がプログラムで発生するのを防ぐ方法、または修正する方法がわかりません。任意の提案や考えをいただければ幸いです!
この問題を回避するために、閉じた Excel ファイルに対して BindToMoniker を使用することはありません (ファイルがロックされているかどうかを確認し、ロックが解除されている場合は、open 関数を使用するだけです)。
この問題が発生したときに実行されるコードは次のとおりです。ファイルが存在し、開いていない場合にのみ発生します。
Public Function OpenExcelFile( _
ByRef pobjExcel As Excel.Application, _
ByRef pwkbWorkBook As Excel.Workbook, _
ByVal pstrFileName As String) As Boolean
...
pwkbWorkBook = BindToMoniker(pstrFileName)
pobjExcel = pwkbWorkBook.Parent
pobjExcel.Visible = True 'Temp; I use this to see the state of the file