rfu
(rfu)
1
こんにちは。いつも勉強させて頂いております。
表題、Excelアプリケーションスコープを用いて、ネットワーク上にある
他人が開いているExcelファイルを開いてセルに値を書き込み、更新しようとした際の挙動について
質問させて頂きたく思います。
他人が開いているためアプリケーションスコープの時点でエラー終了するかと考えていたのですが、
どうも実際にはマイドキュメント直下にファイルを新規作成しているように見受けられます。
動きとして勝手にファイルを作成されるのは困るので、他人が開いている状態であることをキャッチして
エラー終了させたいのですが、どのように実装していけばよいでしょうか。
お知恵をお借りできればと思います。
なお、Studio本体のバージョンは2019.4.4、Excel.Activitiesパッケージのバージョンは2.5.4です。
よろしくお願いいたします。
Yoichi
(Yoichi)
2
こんにちは
動きとして勝手にファイルを作成されるのは困るので、他人が開いている状態であることをキャッチして
エラー終了させたいのですが、どのように実装していけばよいでしょうか。
取り急ぎ以下2案について、検証・検討いただければと思います。
案1:システム-ファイルーワークブック以下のアクティビティを使う(Read Range, Write Rangeなど)
→ファイルが既に開かれている状態だと例外が発生します。
案2:Excel Activity Packageを最新にしてみる。最新の2.7.2では確かこのようなケースで例外が出たかと。(新規作成はOFFで)
rfu
(rfu)
3
ありがとうございます。少し試してみました。
案1:システム-ファイルーワークブック以下のアクティビティを使う
こちらは例外になることが確認できました。
案2:Excel Activity Packageを最新にしてみる。
こちら2.6.1~2.7.2の間で色々変えつつ試してみたところ、
例外が返ってくることは確認できたのですが、例外の発生とともに開こうとしたExcelと同じフォルダに別名でファイルを作成そちらに保存してしまう挙動のようでした。
現状、ワークブックのアクティビティは出来る限り使わない方針で作成しているのですが、
案2の例外時にファイルを作成しないようにする手段は・・さすがにないでしょうかね?
Yoichi
(Yoichi)
4
こんにちは
そのような仕様のようですので、現状ではむつかしいかと思います。例外が発生しますので、例外処理の中でその生成されたファイルを削除すればよいのではとも思いますが...いかがでしょうか?
rfu
(rfu)
5
ありがとうございます。
うーん、動的に名前が生成されるファイルの削除はちょっと誤削除が怖いので、
ワークブックのアクティビティを使用する方向で検討していきたいと思います。
Yoichi
(Yoichi)
6
こんにちは
手元に同様の環境が作れないので未検証ですが、ExcelApplicationScopeでWorkbook変数(仮にwkb)を出力しておいて
wkb.CurrentWorkbook.FullName
でその生成されたファイル名が取得できそうですが、いかがでしょうか?(Catch内でこれを取得してから、Scopeをクローズ、ファイル削除のような感じの処理)
rfu
(rfu)
7
ありがとうございます。
なるほど、仰るとおりの方法で新規作成されたExcelのパスが取得できました。
(例外スローしててもワークブック変数には値が設定されるんですね・・)
こちらの方法も視野に入れて検討してみます。