C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: VC♯2010のExcelプロセスについて


(過去ログ 96 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■57276 / inTopicNo.1)  VC♯2010のExcelプロセスについて
  
□投稿者/ ポラン (1回)-(2011/02/21(Mon) 11:24:19)

分類:[.NET 全般] 

はじめまして、お世話になります。

PCの環境:XP(SP3) office:Excel2000 VC♯2010

現在、VC♯2010にてExcelのプログラムを書いているのですが、色々自分なりに調べて、
書いている最中なのですが、どうしても以下のプログラムを実行するとExcelのプロセスが残ってしまいます。

////////////////////////////////////////////
cells = sheet.get_Range("E3",Type.Missing);
cells.Value2 = "テストです";
////////////////////////////////////////////
この行を、続けて違うレンジ指定で5行以上書くとExcelファイルを最初に開く時に必ず開けません。(セルで書いても残ります)
一応、seetなどは全部オブジェクト化して変数で書いています。文も、「.」が2個以上繋がるとプロセスが残ると言う事
見たいですので、2個以上ならないようにして書いています。プロセスの解放も、処理が終わった後、各オブジェクトの解放をして
最後に「System.GC.Collect();」を書いて終了しています。

又、下記のプログラムを書いてもプロセスが残ってしまいます。
///////////////////////////////////////////
cells = sheet.get_Range("E3",Type.Missing);
cells.Value2 = "テストです";
font = cells.Font;
font.ColorIndex = 3;

cells = sheet.get_Range("F3",Type.Missing);
cells.Value2 = "テストです";
font = cells.Font;
font.ColorIndex = 3;
///////////////////////////////////////////
カラー1個までは、プロセスが残らないのですが、2個以上レンジで色を
変えるとプロセスが残ります。

やりたい事は、計測器からのデータをエクセルに書いて、記録として残す事です。
記録の方法は、試験した時間毎に、同じエクセルのファイルを開いて、記録するような形です。
日付が変わったら、新規にエクセルファイルを作成しています。
データでNGの箇所があった場合は、色を変えたいと思っています。

お手数お掛け致しますが、どなたかプロセスについて分る方いましたら、教えて頂きたいです。

引用返信 編集キー/
■57279 / inTopicNo.2)  Re[1]: VC♯2010のExcelプロセスについて
□投稿者/ shu (460回)-(2011/02/21(Mon) 11:43:25)
No57276 (ポラン さん) に返信

Marshal.ReleaseComObjectで解放する必要があります。
参照したすべてのComオブジェクトに適用する必要があります。
引用返信 編集キー/
■57280 / inTopicNo.3)  Re[2]: VC♯2010のExcelプロセスについて
□投稿者/ やじゅ (1842回)-(2011/02/21(Mon) 12:11:01)
やじゅ さんの Web サイト
No57279 (shu さん) に返信
> Marshal.ReleaseComObjectで解放する必要があります。
> 参照したすべてのComオブジェクトに適用する必要があります。

補足として、Excelのプロセスが正常に終了しない理由
http://hanatyan.sakura.ne.jp/dotnet/Excel08.htm

引用返信 編集キー/
■57283 / inTopicNo.4)  Re[1]: VC♯2010のExcelプロセスについて
□投稿者/ 魔界の仮面弁士 (2072回)-(2011/02/21(Mon) 13:35:52)
No57276 (ポラン さん) に返信
>「.」が2個以上繋がるとプロセスが残ると言う事見たいですので、
それだけでは不足です。既に回答がついていますように、取得した個々の COM オブジェクトを
System.Runtime.InteropServices.Marshal.ReleaseComObject メソッドもしくは
System.Runtime.InteropServices.Marshal.FinalReleaseComObject メソッドで
COM の参照カウントを減ずるべきです。

もしくは、ロードしたアプリケーションドメインごとアンロードするという手もありますが。

で、アプリが終了しても(AppDomainがアンロードされても)終了しない場合は、
Excel の暗黙のインスタンスが生成されてしまっている可能性があるので、
コードをもう一度見直してみた方が良いでしょう。


> 最後に「System.GC.Collect();」を書いて終了しています。
ではなく、Marshal.(Final)ReleaseComObject を試してみてください。


> VC♯2010のExcelプロセスについて
シーシャープの正式表記は C# です。C♯ でも C# でもありません。

【JIS X 3015 プログラミング言語C#】
|
| C# はシーシャープと発音する。
| C# は LATIN CAPITAL LETTER C (U+004) の次に NUMBER SIGN # (U+0023) を書く
|

【Standard ECMA-334 C# Language Specification】
|
| The name C# is pronounced “C Sharp”.
| The name C# is written as the LATIN CAPITAL LETTER C (U+0043) followed by the NUMBER SIGN # (U+0023).
|


> 一応、seetなどは全部オフ゛シ゛ェクト化して変数で書いています。
この掲示板では、半角カナの利用が禁止されています。
http://bbs.wankuma.com/index.cgi?mode=man

> カラー1個までは、プロセスが残らないのですが、2個以上レンジで色を
> 変えるとプロセスが残ります。
最初に取得した方の Range および Font の参照カウントが残っているからだと思います。
別の変数に受けて個別に ReleaseComObject するか、もしくは、
変数を使いまわす前に前回の参照カウントを減ずるようにしましょう。


> やりたい事は、計測器からのデータをエクセルに書いて、記録として残す事です。
Excel の解放処理が面倒であれば、Excel を直接操作するのではなく、
データを Tab 区切りテキストか CSV ファイルとして生成するようにし、
それを Excel ファイル側で、「外部データの取り込み」(QueryTables)を使って
ワークシートにリンクさせておくというのはどうでしょう。

> データでNGの箇所があった場合は、色を変えたいと思っています。
NG 列を作っておけば、Excel の「条件付き書式」だけで対応できるかも。
引用返信 編集キー/
■57355 / inTopicNo.5)  Re[2]: VC♯2010のExcelプロセスについて
□投稿者/ ポラン (2回)-(2011/02/23(Wed) 16:22:09)
shu様、やじゅ様、魔界の仮面弁士様ご回答頂きありがとうございました。
参照カウントを減らす処理を入れた所プロセスが残らずにExcelファイルが開けられるようになりました。
魔界の仮面弁士様のご指摘のC#の正式表記、半角カナの使用は今後気をつけるように致します。
また御質問させて頂く事もあるかもしれませんが、その時はよろしくお願い致します。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -