- PR -

ASP.NETでEXCELシート内でのコピーで、EXCELが終了しない

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/02/02
投稿数: 1
投稿日時: 2005-02-02 21:22
初めまして。こんばんは。
ASP.NETで、Excelを使用した帳票を作成するアプリを開発しています。

問題になっている内容ですが、エクセルブック内でのデータの
コピー&貼り付け処理を行うと、エクセルの終了処理を行った後でも、
タスクにエクセルのプロセスが残ってしまいます。

以下がソースです

Public Xls As Object 'excel.application用
Public Books As Excel.Workbooks 'excel.workbooks
Public Book As Excel.Workbook 'excel.workbook
Public sheets As Excel.Sheets 'excel.worksheets
Public SheetB As Excel.Worksheet 'excel.worksheet
Public SheetL As Excel.Worksheet 'excel.worksheet
Public xlsRB As Excel.Range 'excel.range
Public xlsRL As Excel.Range 'excel.range


Xls = CreateObject("excel.application") '起動
Books = Xls.Workbooks '設定
Book = Books.Open("ファイル名") 'エクセルファイルのオープン
sheets = Book.Worksheets '設定
SheetB = CType(sheets("ベースシート名"), Excel.Worksheet) '設定
SheetL = CType(sheets("出力シート名"), Excel.Worksheet) '設定
xlsRB = SheetB.Cells '設定
xlsRL = SheetL.Cells '設定

xlsRB.Range(xlsRB(R1, C1), xlsRB(R2, C2)).Copy(xlsRL.Range("A1")) ←ここが問題点です。


書き込み処理(略)


'** 保存 **
Book.Save()

System.Runtime.InteropServices.Marshal.ReleaseComObject(Books) 'booksの開放
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheets) 'sheetsの開放
System.Runtime.InteropServices.Marshal.ReleaseComObject(SheetB) 'sheetの開放
System.Runtime.InteropServices.Marshal.ReleaseComObject(SheetL) 'sheetの開放
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsRB) 'rangeの開放
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsRL) 'rangeの開放

Book.Close(False) 'bookのクローズ
System.Runtime.InteropServices.Marshal.ReleaseComObject(Book) 'bookの開放
Book = Nothing

Xls.DisplayAlerts = False 'メッセージ非表示

Xls.Quit() 'excel終了
System.Runtime.InteropServices.Marshal.ReleaseComObject(Xls) 'excelの開放
Xls = Nothing 'excelをnothing

GC.Collect()

これまでにも、いろいろな終了のさせ方やコピーの仕方を試しましたが、
すべてダメでした。現段階では、このInsider.NET 会議室の、
"[ASP.NET]EXCELが終了しない。(2003-01-20 22:30)"を参考にしています。
解決方法をご存知の方が御座いましたら、ご教授宜しくお願いいたします。


[ メッセージ編集済み 編集者: 未記入 編集日時 2005-02-03 09:11 ]
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-02-02 21:35
引用:

解決方法をご存知の方が御座いましたら、ご教授宜しくお願いいたします。



すべてを精査するには長いコードなので、「どこかで何かの参照がリークしているんでしょう」としか。。。

本題とは関係ないかもしれませんが、

引用:

Xls.DisplayAlerts = False 'メッセージ非表示



は、もっと上の方がいいんじゃないでしょうか。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
1

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