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

■35642 / 5階層)  GetObjectでExcelファイルを加工するとExcelファイルが壊れる
□投稿者/ 魔界の仮面弁士 大御所(1580回)-(2024/12/12(Thu) 16:11:45)
  • アイコンNo35641に返信(suekunさんの記事)
    > 関連なのですが
    ファイルが破損してしまっている状態だったのか
    それともブックが非表示になっていただけなのか
    確認はとれましたか?


    > そうしないと、読み取り専用で開いてしまいます。
    この判定を行う目的を教えてください。

    編集・保存することを目的としたものでしょうか。
    それとも、他で同時に開かれていないことを保証したいのでしょうか。
    目的を満たすために、GetObject 以外の手法を使うことは許容されますか?

    他で開かれていても保存までできるパターンはありますし
    他で開かれていなくても保存できないパターンもありますし、
    他で開かれていて Workbooks.Open で排他エラーになるパターンもあるので
    念のために確認しています。

    最終的に、ファイルに「読み取り専用属性が付いているか」とか
    アクセス権で「読み取りは許可されているが編集は許可されていない」などの
    パターンまでチェックするのか、何のためにどこまで調査したいのか…。

    GetObject に拘りが無ければ、ROT から Excel.Application オブジェクトを辿って、
    Excel.Application インスタンス (表示名「!{00024500-0000-0000-C000-000000000046}」)から
    それぞれの Workbooks コレクションを列挙判定するという手段もあります。
    コードとしては些か回りくどくなりますが…。
    https://alax.info/blog/1444
    http://bbs.wankuma.com/index.cgi?mode=one&namber=103471


    > これはいかがでしょうか?正常に動作しています。
    うぅむ?
    ListFile と NyukoCSVListFile の関連性が謎ですね??

    変数宣言や Visible の指定有無など、色々と省略され過ぎていて、
    是非の判断がしづらいところです。

    > wb = Appxl.Workbooks.Open(ListFile)
    この書き方は避けるべきですが、ここも掲示板投稿時に
    簡略化しているだけだと思うので、ひとまず目を瞑るとして…。


    > If IO.File.Exists(ListFile) = True Then
    >  Try
    >   System.IO.File.Move(ListFile, ListFile)
    1 行目では「System」を省略して、
    3 行目では明記するという非対称性がとても気になる…。

    Boolean 値の判定時に「= True」を書くべきか否かとか、
    GoTo の是非とか、素の Exception を Catch するべきかどうかとか、
    Message を表示するだけでどの Exception かを記録しないのか、
    そういった宗教論についてはとりあえず保留するとして。


    閑話休題

    >   '移動できなかったら起動していると判定
    この手順ですが、確実性のある手法では無いです。
    そのファイルが Excel で開かれているからといって、同名 Move が失敗する保証は無いからです。

    たとえば、扱っていたファイルが MultiUserEditing = True なものだった場合です。
    共有モードで開かれたファイルであれば、複数ユーザーが同時に開いて編集して保存できますし、
    開かれている最中でも、コマンドプロンプトからの同名 MOVE や VB からの同名 File.Move が
    エラーを発することはありません。

    もちろん、そうした前提条件が明確になっていて、それで目的を果たせる場合は
    現在の手法でも構わないと思います。
違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[4]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる /suekun →Re[6]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる /魔界の仮面弁士
→Re[6]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる /suekun
→Re[6]: 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アイコン Re[3]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる / 魔界の仮面弁士 (24/12/11(Wed) 18:15) #35640
      └Nomalアイコン Re[4]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる / suekun (24/12/12(Thu) 07:28) #35641
        └Nomalアイコン GetObjectでExcelファイルを加工するとExcelファイルが壊れる / 魔界の仮面弁士 (24/12/12(Thu) 16:11) #35642 ←Now
          ├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 -