- PR -

ASP.NETでExcelマクロの起動について

投稿者投稿内容
achi
会議室デビュー日: 2006/01/08
投稿数: 17
投稿日時: 2006-01-14 10:18
いつもお世話になります。

ASP.NETでWebフォームからExcelのマクロ付きファイルを
起動するアプリを作っているのですがエラーが発生するため
ご教授頂きたく書き込みさせて頂きました。

Excelの起動に関してはたくさんの書き込みがあり
参考にさせて頂いているのですが以下のロジックで
OPENする際にエラーが発生します。
エラーメッセージは表示されないのですが
タスクマネージャでEXCEL.EXEが残ってしまうのは
確認しています。

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim xlApp As Excel.Application

Try
xlApp = New Excel.Application
xlApp.DisplayAlerts = False
xlApp.Visible = True

Dim xlBooks As Excel.Workbooks = xlApp.Workbooks

Try

'----<この後エラーが発生します>----------------------------------------------
Dim xlBook As Excel.Workbook = xlBooks.Open("C:\\\\moto.xls")
'----------------------------------------------------------------------------

Try
xlApp.Run("Auto_Open")
'xlApp.Run("Sheet_02.Auto_Open")
Finally
If Not xlBook Is Nothing Then
Try
xlBook.Close()
Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
End Try
End If
End Try
Finally
If Not xlBooks Is Nothing Then
Try
xlBooks.Close()
Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks)
End Try
End If
End Try
Finally
If Not xlApp Is Nothing Then
Try
xlApp.Quit()
Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
End Try
End If
End Try
End Sub
End Class


VS.NETよりブレークポイントを設定し実行
1行ずつ処理した結果OPENでエラーになっています。
また、それ以降のステップに行くことはありません。

タスクマネージャーに残っていることにより?
他のマクロ付きファイルを開くとExcelが異常終了します。


したいことは
Excelを起動し、マクロを実行、マクロにより作られたシート
をWebファイル(.htm)で保存したいと思っています。
htmファイルを作り出すところまではExcel単体で
確認できるため完了しております。

ボタンクリック→OPENしてエラーが発生(ビープ音が2回)
再度ボタンのある画面が表示されます。(再表示ではありません)

WEBCONFIGは
<identity impersonate="true" />
</system.web>
としております。

また、DCOMCNFGのExcelアプリケーションにて
識別タグで、マシン名\\\\IUSR_マシン名を
実行ユーザーアカウントとしました。
当然のこと?ながらその後他のEXCELファイルを
開くと「現在OLEは使用できません」と表示されます。
(でも、ファイルは開きますが)

上記の次第であります。
お手数ですが何卒ご教授よろしくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-14 10:36
どうも、いつも Excel というか COM ネタに反応する、じゃんぬ です。

引用:

achiさんの書き込み (2006-01-14 10:18) より:

Excelの起動に関してはたくさんの書き込みがあり
参考にさせて頂いているのですが以下のロジックで
OPENする際にエラーが発生します。
エラーメッセージは表示されないのですが


エラーというか、例外が発生するのは判りました。
発生している例外は COMException ですか?

詳細を見たいので、例外のインスタンスの詳細をください。
ToString メソッドの結果で良いです。

マクロ実行となると、Excel 自体のセキュリティも落とす必要がありますが、
これのせいじゃないかと予想しています。
確認のため、DisplayAlerts = False を一旦、コメントアウトしてみてください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
achi
会議室デビュー日: 2006/01/08
投稿数: 17
投稿日時: 2006-01-14 11:35
じゃんぬねっと様、すみません、度々お世話になります。

DisplayAlerts = False をコメントアウトにして
再度処理しましたが同事象です。

また、
------------------------------------------------------
詳細を見たいので、例外のインスタンスの詳細をください。
ToString メソッドの結果で良いです。
------------------------------------------------------
これについてどうすればよいのかが
分かりません。すみません。
お手数ですが方法を教えて頂けますでしょうか。


どうぞよろしくお願い致します。


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-14 11:57
引用:

achiさんの書き込み (2006-01-14 11:35) より:

お手数ですが方法を教えて頂けますでしょうか。


基本的な構文なので覚えておいた方が良いです。

コード:

    Try
        Dim xlBook As Excel.Workbook = xlBooks.Open("...")
    Catch ex As Exception
        Console.WriteLine(ex.ToString())
    Finally
        :
    End Try


COMException (HRESULT の例外) だろうとは思いますが、
確認のためにスタック トレースなどが欲しいのです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-01-14 12:25
引用:

WEBCONFIGは
<identity impersonate="true" />
</system.web>
としております。



によって決定されるアカウント(=この場合は多分ブラウザでWebサーバにアクセスしているドメインユーザアカウント)は

引用:

Dim xlBook As Excel.Workbook = xlBooks.Open("C:\\\\moto.xls")



の Excel ワークブックに対するアクセス権を持っているでしょうか?

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-14 13:37
引用:

渋木宏明(ひどり)さんの書き込み (2006-01-14 12:25) より:

の Excel ワークブックに対するアクセス権を持っているでしょうか?


あ、そっか。
Open の時なら、そっちの方が濃厚ですね。(^^;)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-01-14 15:00
引用:

引用:

の Excel ワークブックに対するアクセス権を持っているでしょうか?


あ、そっか。
Open の時なら、そっちの方が濃厚ですね。(^^



で、その後問題になるのが、じゃんぬさんが指摘しているような様々です。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
achi
会議室デビュー日: 2006/01/08
投稿数: 17
投稿日時: 2006-01-14 16:04
じゃんぬねっと様、渋木宏明(ひどり)様
ありがとうございます。

じゃんぬねっと様
大変申し訳ありません、以下のようにCatchを入れると


Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim xlApp As Excel.Application

Try
xlApp = New Excel.Application
'xlApp.DisplayAlerts = False
xlApp.Visible = True

Dim xlBooks As Excel.Workbooks = xlApp.Workbooks

Try
'Dim xlBook As Excel.Workbook = xlBooks.Open("C:\Inetpub\wwwroot\ExcelADO\moto.xls")
Dim xlBook As Excel.Workbook = xlBooks.Open("C:\moto.xls")
Catch ex As Exception
Console.WriteLine(ex.ToString())
Try
xlApp.Run("Auto_Open")
'xlApp.Run("Sheet_02.Auto_Open")
Finally
If Not xlBook Is Nothing Then
Try
xlBook.Close()
Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
End Try
End If
End Try
Finally
If Not xlBooks Is Nothing Then
Try
xlBooks.Close()
Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks)
End Try
End If
End Try
Finally
If Not xlApp Is Nothing Then
Try
xlApp.Quit()
Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
End Try
End If
End Try
End Sub
End Class

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