DOBON.NETプログラミング道掲示板
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
No35642 の記事
■35642
/ )
Re[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 が
エラーを発することはありません。
もちろん、そうした前提条件が明確になっていて、それで目的を果たせる場合は
現在の手法でも構わないと思います。
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
返信
削除キー/
編集
削除
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-