- PR -

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

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-26 17:52
ここだけ見てください。

引用:

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

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


最初に格納した参照を解放していません。
別の参照を入れる前に解放しなければなりません。
というよりは最初の行は要らないですよね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-01-26 19:05
じゃんぬねっとさんありがとうございます。
あとひとつ教えて頂きたいのですが
ExcelのB列の最終入力行を取得する場合

Excel.Range oRng;
oRng = xlSheet.get_Range("B60000",Type.Missing).get_End(Excel.XlDirection.xlUp);
long lngA = oRng.Row;
Marshal.ReleaseComObject(oRng);

これだとまたCOMが開放されません。
どのように書いたらよろしいのでしょうか。
何度も質問ばかりですみません。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-26 19:09
引用:

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

これだとまたCOMが開放されません。
どのように書いたらよろしいのでしょうか。


これは間に入っているものが暗黙的に参照されていることが原因です。
xlApplication.WorkBooks[1].WorkSheets[1] などとしているのと同じですよね。

xlSheet.get_Range("B60000",Type.Missing) この時点で 1 つの参照を取ります。
その参照から、get_End(Excel.XlDirection.xlUp) の参照を取得します。
もちろん 2 つとも ReleaceComObject しなければなりません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-01-26 20:02
どうもありがとうございます。
なんとかしたい処理ができそうです。
本当に感謝しています。非常に助かりました。

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