- PR -

指定ファイルが開いているか取得するには

投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-01-26 09:50
いつもお世話になってます。

C#.netでお聞きしたいのですが、
画面にボタン「A」と「B」があります。
「A」で指定したExcelファイルを起動し、
「B」でそのExcelファイルが起動中か取得するにはどうすれば
良いのでしょうか。
ボタン「A」では
Process.Start("Excelファイル名");
でExcelファイルを起動しています。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-26 10:09
Excel が起動中の場合、開いているファイル名は取得できますが、
本当に同一かどうかまでは取得できなかったと思います。

ですので、A に「この Excel ファイルを読み込んだ」という情報を持ち、
B がそれを取得するのが望ましいと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-01-26 11:07
引用:

「A」で指定したExcelファイルを起動し、
「B」でそのExcelファイルが起動中か取得するにはどうすれば
良いのでしょうか。



「Excel で開いている」ことの確認なら、ROT を紹介するのが簡単かも。
API で出来るし。
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-01-26 14:46
じゃんぬねっとさん、渋木宏明さんご返答ありがとうございます。
とりあえずProcessからファイル名を取得し、ファイル名が一致すれば
開いていることにしました。

あとExcelファイルに書き込み処理をしているのですが
プロセスが消えてくれません。
下記のどこが悪いのでしょう。

Excel.Application xlApp = new Excel.Application();
Excel.Workbooks xlBooks;

xlBooks = xlApp.Workbooks;

Excel.Workbook xlBook = xlBooks.Open("Excelファイル",Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing);

Marshal.ReleaseComObject(xlBook);
Marshal.ReleaseComObject(xlBooks);
Marshal.ReleaseComObject(xlApp);
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-26 15:00
引用:

未記入さんの書き込み (2006-01-26 14:46) より:

あとExcelファイルに書き込み処理をしているのですが
プロセスが消えてくれません。
下記のどこが悪いのでしょう。


どこも悪くないと思います。
正常処理の場合であれば、正しく参照の解放がなされていると思います。

ただ、気になるのは「書き込み処理をしている」と仰っているわりに、
記載して頂いたソースには、それが含まれておりません。
そこに原因があるのではないでしょうか?

確実に解放したい場合は以下を参照してください。

  COM オブジェクトを解放する

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-01-26 15:11
じゃんぬねっとさんご返答ありがとうございます。
ソースは悪くないんですね。
教えて頂いたHPで、もう少し調べてみます。

ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-26 15:13
引用:

未記入さんの書き込み (2006-01-26 15:11) より:

ソースは悪くないんですね。


提示して頂いた部分に関してはです。
多分、書き込み処理をしているところに問題があるか、
または、別のところで参照カウントがインクリメントされてしまっているのでしょう。

もし解決できなければ、その部分のソースを記載してください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-01-26 17:41
下記の部分でExcelプロセスが開放できません。

Excel.Application xlApp = new Excel.Application();
Excel.Workbooks xlBooks;

xlBooks = xlApp.Workbooks;

Excel.Workbook xlBook = xlBooks.Open("Excelファイル名",Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing);

Excel.Worksheet xlSheet = (Excel.Worksheet)xlBook.ActiveSheet;
Excel.Range xlRangeA = xlSheet.Cells;
Excel.Range xlCells = xlSheet.Cells;

xlRangeA = (Excel.Range)xlCells[1,1]; ←この行を削除すればプロセスに残りません。

Marshal.ReleaseComObject(xlRangeA);
Marshal.ReleaseComObject(xlCells);
Marshal.ReleaseComObject(xlSheet);

xlBook.Close(Type.Missing,Type.Missing,Type.Missing);
xlBooks.Close();
xlApp.Quit();

Marshal.ReleaseComObject(xlBook);
Marshal.ReleaseComObject(xlBooks);
Marshal.ReleaseComObject(xlApp);

何が悪いのでしょうか。よろしくお願いします。



スキルアップ/キャリアアップ(JOB@IT)