- PR -

[ASP.NET]EXCELが終了しない

投稿者投稿内容
おくちn
会議室デビュー日: 2003/01/20
投稿数: 8
投稿日時: 2003-01-21 14:16
重ね重ね申し訳ありません。

新しいプロジェクトを作成して、実行してみましたが、やはり、EXCELが落ちません。
しばらくEXCELがCPUを食ってる状況も変わりません。
ちなみに環境は
WIndowsXP PRO
OFFICE2000 + SP3
.NET FW + SP2 です。
新しいプロジェクトでソースに見えていない部分で変更した箇所は
Web.Configに
<identity impersonate="true" />
参照設定にExcel9.0を追加しました。

Public Class WebForm1
Inherits System.Web.UI.Page

#Region " Web フォーム デザイナで生成されたコード "

'この呼び出しは Web フォーム デザイナで必要です。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
' CODEGEN: このメソッド呼び出しは Web フォーム デザイナで必要です。
' コード エディタを使って変更しないでください。
InitializeComponent()
End Sub

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ページを初期化する ユーザー コードをここに挿入します。
Dim MyTest As New TestClass()

MyTest.Test("D:\Test.xls")


MyTest = Nothing

GC.Collect()

End Sub

End Class

Public Class TestClass

Public Function Test(ByVal FileName As String)

Dim xl As New Excel.Application()

xl.Workbooks.Open(FileName)
xl.Application.DisplayAlerts = False
xl.ActiveWorkbook.Worksheets(1).CellS(1, 1) = "テスト"
xl.ActiveWorkbook.Save()
xl.ActiveWorkbook.Close(False)
xl.Application.DisplayAlerts = True
xl.Quit()
xl = Nothing
End Function

End Class

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-01-21 16:29
引用:

おくちnさんの書き込み (2003-01-21 14:16) より:
重ね重ね申し訳ありません。

新しいプロジェクトを作成して、実行してみましたが、やはり、EXCELが落ちません。
しばらくEXCELがCPUを食ってる状況も変わりません。


・反対に、いつEXCELがなくなりますか?
・また、ページを再読込すると、EXCELは増えますか?
おくちn
会議室デビュー日: 2003/01/20
投稿数: 8
投稿日時: 2003-01-21 16:56
回答致します。

>・反対に、いつEXCELがなくなりますか?
たぶんPCを再起動するまでなくなりません。
プロジェクトを落としても、1時間程度待ってみても、IISを再起動しても消えま
せんでした。

>・また、ページを再読込すると、EXCELは増えますか?
増えるみたいです。
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2003-01-21 18:37
次のコードでどうでしょうか?当方ではEXCEL.EXEが消えてくれました。これで消えるようでしたら、これはCOMの参照カウントの問題ですね。

コード:
Public Function Test(ByVal FileName As String)
  Dim xl As New Excel.Application

  'xl.Workbooks.Open(FileName)
  Dim books As Excel.Workbooks = xl.Workbooks
  Dim book As Excel.Workbook = books.Open(FileName)
  System.Runtime.InteropServices.Marshal.ReleaseComObject(books)

  'xl.Application.DisplayAlerts = False
  xl.DisplayAlerts = False

  'xl.ActiveWorkbook.Worksheets(1).CellS(1, 1) = "テスト"
  Dim sheets As Excel.Sheets = book.Worksheets
  Dim sheet As Excel.Worksheet = CType(sheets(1), Excel.Worksheet)
  System.Runtime.InteropServices.Marshal.ReleaseComObject(sheets)
  Dim range As Excel.Range = sheet.Cells
  System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet)
  range(1, 1) = "テスト2"
  System.Runtime.InteropServices.Marshal.ReleaseComObject(range)

  'xl.ActiveWorkbook.Save()
  book.Save()

  'xl.ActiveWorkbook.Close(False)
  book.Close(False)
  System.Runtime.InteropServices.Marshal.ReleaseComObject(book)

  'xl.Application.DisplayAlerts = True
  xl.DisplayAlerts = True

  'xl.Quit()
  xl.Quit()
  System.Runtime.InteropServices.Marshal.ReleaseComObject(xl)

  xl = Nothing
End Function

おくちn
会議室デビュー日: 2003/01/20
投稿数: 8
投稿日時: 2003-01-21 18:40
自己解決です。

WebConfigに追加した
<identity impersonate="true" />
がいけなかったみたいです。

当初、EXCELオブジェクトがNEW出来なかったので、上記の一行を追加したのですが。
EXCELオブジェクトをコンポーネントサービスもしくは、DCOMCNFGでセキュリティの
起動の許可に、ASPNETユーザーを追加すればOKでした。

お忙しい中、お時間をさいて頂きまして、ありがとうございました。
今後とも、よろしくお願い致します。

ぼっくり
会議室デビュー日: 2005/04/06
投稿数: 1
お住まい・勤務地: 東京
投稿日時: 2005-04-06 14:12
だいぶ前のスレッドのようですが。

>当初、EXCELオブジェクトがNEW出来なかったので、上記の一行を追加したのですが。
>EXCELオブジェクトをコンポーネントサービスもしくは、DCOMCNFGでセキュリティの
>起動の許可に、ASPNETユーザーを追加すればOKでした。

できれば上記作業を詳しく教えていただけませんでしょうか?
コンポーネントサービスにEXCELオブジェクトの追加を
やり方が不明です。どうやってやるのでしょうか。
またDCOMCNFGの方はなんとなくASPNETユーザーの追加はできました。

よろしくお願いいたします。

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