DOBON.NETプログラミング道掲示板

■35640 / 3階層)  GetObjectでExcelファイルを加工するとExcelファイルが壊れる
□投稿者/ 魔界の仮面弁士 大御所(1579回)-(2024/12/11(Wed) 18:15:40)
  • アイコン2024/12/11(Wed) 23:22:28 編集(投稿者)

    No35639に返信(suekunさんの記事)
    >>保存は行われるが、保存結果が「シート数 0 の不正なブック」になるのか
    > →その通りです。(開きますが、シートが無く、ブック名も表示されません。Excelだけを開いた状態になります。)

    そのブックは本当に壊れていますか?
    不可視状態になっているだけではないですか?

    シート数 0 のブックなら、Excel で開いた時に
    「{filename} の一部の内容に問題が見つかりました。」
    などのエラーあるいは修復案などが提示されるはずなんですが。

    該当のブックを Excel で開いた状態で、
    [表示]リボンの[ウィンドウ]>[再表示] などに不可視ウィンドウが無いか確認してみてください。


    ブックがまだ開かれていない状態で、GetObject を通じて起動された場合、
    各種ウィンドウが非表示モードになる可能性が高いです。

    プログラムから処理する場合は、Windows プロパティを列挙して
    該当の Window オブジェクトの Visible プロパティを切り替えます。



    > Dim Appxl As New Excel.Application
    > wb = Appxl.Workbooks.Open(ListFile)
    これは NG。

    books = Appxl.Workbooks
    wb = books.Open(ListFile)

    のようにしないと、Workbooks プロパティが COM オブジェクトを
    返却してきたときに解放漏れに繋がります。


    同様の理由で
    > Dim tl = sh.Cells(2, 1)
    これも
     Dim oCells = sh.Cells
     Dim tl = DirectCast(oCells(2, 1), Excel.Range)
    になるべきですね。どちらも As Excel.Range 型の変数です。

    この時、変数を tl が As Excel.Range であることを確認してください。
    As Object として受けた場合、COM 相互運用アセンブリの実装によっては、
     wrange = sh.Range(tl, br)
    などの処理を通過したときに、内部の型変換時に、COM の参照カウントが
    予期せず増加してしまうことがあります(増加しないこともあります)。
    増加していた場合は、Marshal.ReleaseComObject の戻り値が 0 になりません。


    それと、「COM オブジェクトを返すプロパティ」を複数回呼び出した場合にも注意が必要です。
     Dim oRange1 = sh.Cells
     Dim oRange2 = sh.Cells
    などでは、oRange1 と oRange2 は別インスタンスになるので、
    それぞれを ReleaseComObject する必要があります。

    それに対して
     Dim oRange1 = sh.Cells
     Dim oRange2 = oRange1
    のようなケースでは、同じ COM オブジェクトを複数の変数から見ているだけなので
    いずれかの変数のみを ReleaseComObject するようにします。両方やると過解放になってしまいます。
違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[2]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる /suekun →Re[4]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる /suekun
 
上記関連ツリー

Nomalアイコン GetObjectでExcelファイルを加工するとExcelファイルが壊れる / suekun (24/12/11(Wed) 11:53) #35636
Nomalアイコン Re[1]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる / suekun (24/12/11(Wed) 15:14) #35637
Nomalアイコン Re[1]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる / 魔界の仮面弁士 (24/12/11(Wed) 16:44) #35638
  └Nomalアイコン Re[2]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる / suekun (24/12/11(Wed) 17:03) #35639
    └Nomalアイコン GetObjectでExcelファイルを加工するとExcelファイルが壊れる / 魔界の仮面弁士 (24/12/11(Wed) 18:15) #35640 ←Now
      └Nomalアイコン Re[4]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる / suekun (24/12/12(Thu) 07:28) #35641
        └Nomalアイコン Re[5]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる / 魔界の仮面弁士 (24/12/12(Thu) 16:11) #35642
          ├Nomalアイコン Re[6]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる / 魔界の仮面弁士 (24/12/12(Thu) 16:23) #35643
          ├Nomalアイコン Re[6]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる / suekun (24/12/13(Fri) 08:56) #35644
          └Nomalアイコン Re[6]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる / suekun (24/12/18(Wed) 15:31) #35645 解決み!

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -