- - PR -
指定ファイルが開いているか取得するには
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-01-26 09:50
いつもお世話になってます。
C#.netでお聞きしたいのですが、 画面にボタン「A」と「B」があります。 「A」で指定したExcelファイルを起動し、 「B」でそのExcelファイルが起動中か取得するにはどうすれば 良いのでしょうか。 ボタン「A」では Process.Start("Excelファイル名"); でExcelファイルを起動しています。 | ||||
|
投稿日時: 2006-01-26 10:09
Excel が起動中の場合、開いているファイル名は取得できますが、
本当に同一かどうかまでは取得できなかったと思います。 ですので、A に「この Excel ファイルを読み込んだ」という情報を持ち、 B がそれを取得するのが望ましいと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-01-26 11:07
「Excel で開いている」ことの確認なら、ROT を紹介するのが簡単かも。 API で出来るし。 | ||||
|
投稿日時: 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); | ||||
|
投稿日時: 2006-01-26 15:00
どこも悪くないと思います。 正常処理の場合であれば、正しく参照の解放がなされていると思います。 ただ、気になるのは「書き込み処理をしている」と仰っているわりに、 記載して頂いたソースには、それが含まれておりません。 そこに原因があるのではないでしょうか? 確実に解放したい場合は以下を参照してください。 COM オブジェクトを解放する _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-01-26 15:11
じゃんぬねっとさんご返答ありがとうございます。
ソースは悪くないんですね。 教えて頂いたHPで、もう少し調べてみます。 ありがとうございました。 | ||||
|
投稿日時: 2006-01-26 15:13
提示して頂いた部分に関してはです。 多分、書き込み処理をしているところに問題があるか、 または、別のところで参照カウントがインクリメントされてしまっているのでしょう。 もし解決できなければ、その部分のソースを記載してください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 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); 何が悪いのでしょうか。よろしくお願いします。 |