現在VB.NETで開発を行っており、エクセルの解放ができず困っているの
ですが、下記のソースではうまくできませんでした。
申し訳ございませんが、間違っている箇所等のご指摘をよろしくお願い
いたします。
開発環境
VB.NET2003
windowsXP Pro
ソース
---中略---
dim Mycells as Excel.Range
' エクセル出力時の処理
With ExcelModule.SysWorkSheet
' ヘッダー
For MyColCount = 0 To SprDataList.Sheets(0).Columns.Count - 1
Mycells = .Cells(1, MyColCount + 1)
Mycells(1, MyColCount + 1).Value = SprDataList.Sheets(0).Columns (MyColCount).Label.ToString
System.Runtime.InteropServices.Marshal.ReleaseComObject(Mycells)
Mycells = Nothing
Next
' 明細
For MyRowCount = 0 To SprDataList.Sheets(0).Rows.Count - 2
For MyColCount = 0 To SprDataList.Sheets(0).Columns.Count - 1
If TypeOf SprDataList.Sheets(0).Columns(MyColCount).CellType Is FarPoint.Win.Spread.CellType.TextCellType Then
Mycells = .Cells(MyRowCount + 2, MyColCount + 1)
Mycells(MyRowCount + 2, MyColCount + 1).NumberFormatLocal = "@"
System.Runtime.InteropServices.Marshal.ReleaseComObject (Mycells)
Mycells = Nothing
End If
Mycells = .Cells(MyRowCount + 2, MyColCount + 1)
Mycells(MyRowCount + 2, MyColCount + 1).Value = SprDataList.Sheets(0).Cells(MyRowCount, MyColCount).Text.ToString
System.Runtime.InteropServices.Marshal.ReleaseComObject(Mycells)
Mycells = Nothing
Next
Next
End With
'エクセル切断
Call ExcelModule.FncCloseExcel(MyErrNum, MyErrDesc)
以下はFncCloseExcelの定義
'------------------------------
' Excel解放
'------------------------------
If Not (SysWorkSheet Is Nothing) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject (SysWorkSheet)
SysWorkSheet = Nothing
End If
If Not (SysWorkBook Is Nothing) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject (SysWorkBook)
SysWorkBook = Nothing
End If
If Not (SysExcel Is Nothing) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject (SysExcel)
SysExcel = Nothing
End If
'------------------------------
' メモリ解放
'------------------------------
System.GC.Collect()
以上です。不明な箇所がありましたら、それも含めてご指摘お願い
いたします。
この辺から解放ができていないのでは。
変数に受けて解放するようにして下さい。
基本的に . が2個以上続く場合は一度変数に受ける必要があります、でないと解放できません。
Excel の起動と終了以外は一度コメントにしてキチンと解放されている事を
確認してから、確認しながら順次コメントを解除していけば、どの処理で解放されていないのかが解るはず。(頑張って調べて下さい)
http://hanatyan.sakura.ne.jp/dotnet/Excel08.htm
>With ExcelModule.SysWorkSheet
>For MyColCount = 0 To SprDataList.Sheets(0).Columns.Count - 1
VBレスキュー(花ちゃん) さん
失礼な書き込みをしてしまいすいませんでした。
現在、原因箇所を調べておりますので、その上で解決できない
問題がありましたら、再度書き込みをさせていただきます。
花ちゃんさまへ、、HPのリンク間違っているかと。。
もにもにさんへ
一度解放したと思っていても、
実際2回くらいやらないとメモリから解放されないようです。
Windows Developer Magazineの何回か前にかいてありました。
気になるようなら
sendmessage で WM_CLOSEでもおくってみてください。(w
花ちゃんさま、ヤマ@文系さま
いろいろ試してみた結果解決することができました。
ありがとうございました。
ツイート | ![]() |