aspxに貼り付けてあるボタンを押下すると
以下の関数を呼び出してエクセルを起動させようと
思ったのですが「ActiveX コンポーネントを作成できません。」
というエラーが返ってきてしましました。
ActiveXを参照追加すればいいのかと思ったのですが
全く変わりませんでした。
何が原因だがお分かりになる方ご回答お願いします。
Private Function excelEXE() As String
Dim MjobjExcel As Excel.Application
Dim MjobjExcelBook As Excel.Workbook
MjobjExcel = CType(CreateObject("Excel.Application"), Excel.Application)
MjobjExcelBook = CType(MjobjExcel.Workbooks.Add, Excel.Workbook)
MjobjExcel.Application.Visible = True
End Function
「ActiveX コンポーネントを作成できません。」のエラーってオブジェクト生成の
段階で何か失敗するとよく出ます。ActiveX 関係のCOMとかは全く関係ないと思い
ますので ActiveX の参照とやらで設定した参照は外しておいた方が良いですよ。
.NET でエクセルを使うには Microsoft Excel 10.0 Object Library を参照すれば
いいだけです。…設定すると Office.Core もついてくると思いますが…。
あとは…エクセル呼び出しのソースについてですが… VB.NET の環境でフォームに貼り付けた
ボタンからの実行では問題ないですね。動きます。
どの段階でエラー出てますか?CreateObject の段階で通ってないんじゃないかと
思うんですが…。
こちらでは .NET 2003 にしてからOSが WinXp で Office も Xp でないとうまく動かない(?)
部分があるという現象はありました。
OSと Office のサービスパックは最新ですか?。それだけ確認して、CreateObject
が通っているか確認していただけますか?。excelEXE()のみの実行でお願いします。
ちなみに上のコードの確認は Win2000 SP4, OfficeXp SP2, VB.NET2003で動作確認しました。
aspxですか…。Webアプリケーションの場合、Windowsアプリケーションよりも
セキュリティ上の制限が厳しくなるので、(Excelのような)デスクトップとの
対話を必要とするオブジェクトの生成は厳しくなると思いますよ。
私自身、試した事が無いので具体的なアドバイスはできませんが、
サーバサイドでCreateObjectする場合は、DCOMCNFGなどにて、
"Microsoft Excel アプリケーション"への各種の権限設定を、
IISの実行ユーザに対して許可してみては如何でしょう。
返信遅れました。申し訳ないです。
環境は .NET2003のOSがWinXp です。
当然Microsoft Excel 10.0 Object Library を参照してます。
上記の処理だけ動かしたのですが
確かにCreateObject の段階でエラーになりますね・・・
これはつかえないのかなぁ・・・
環境に依存するとなるとあまり使えないですから
別の方法で考えてみるしかないかな。。。
CreateObject ???
参照設定が為されているならば、CreateObjectの必要はありませんが・・・
Dim oExcel As New Excel.Application()
Dim oBooks As Excel.Workbooks, oBook As Excel.Workbook
Dim oSheets As Excel.Sheets, oSheet As Excel.Worksheet
Dim oCells As Excel.Range
Dim sFile As String, sTemplate As String
Dim dt As DataTable = _
CType(Application.Item("MyDataTable"), DataTable)
sFile = Server.MapPath(Request.ApplicationPath) & _
"\MyExcel.xls"
sTemplate = Server.MapPath(Request.ApplicationPath) & _
"\MyTemplate.xls"
oExcel.Visible = False : oExcel.DisplayAlerts = False
で、問題無く動作します。
GotDotNet.com の ExportToExcel を参考にして見て下さい。
http://www.gotdotnet.com/
尚、魔界の仮面弁士さんの言われるとおり、セキュリティー設定が、昔の
ASPより格段に難しくなっていますので、ExportToExcelを動かすだけで
も、少々苦労されると思います。
参考までに・・・
以上。
上記のソースをそのまま試した見たのですが
Dim oExcel As New Excel.Application()
の段階でエラーになりました。
New を取ったら
oExcel.Visible = False : oExcel.DisplayAlerts = False
やっぱりオブジェクトが生成されてないよってエラーに出るし…
DCOMCNFGで調べて見たのですが権限はフルコントロールだと
思います。
確信がないのはその辺のことよく知らないので
いじりたくてもレジストリいじるほど知識がないので…
我ながら情けないです。
もうちょっと勉強して出直したほうがよいのかもしれません。
とは、IISの設定です。
インターネットサービスマネージャを起動し、既定のWebサイト下の街頭の
サービスが存在するフォルダ名を右クリックし、プロパティーを表示します。
多分、アプリケーションの設定が、スクリプトのみになっているはずですの
で、作成をクリックし、アプリケーションの保護を高(分離プロセス)にし
ます。実行アクセス権も、スクリプトおよび実行可能ファイルにしておく必
要があります。また、ExportToExcelでは、そのフィルダへの書込みも行い
ますので一応、ロ−カルパスのところの書込みにはチェックを入れて下さい。
あとは、DCOMCNFGでのエクセルのセキュリティー設定ですが・・・
一度、いじくると、通常のデスクトップでの起動や、OLEでの連動すらも
動作しなくなるので・・・要注意です。
私は、設定をしくじったおかげで、OSからの再インストールを余儀なく
されました・・・
● 上記の、Dim oExcel As New Excel.Application()でエラーになると
言う部分ですが、タスクマネージャを起動し、メモリ上にエクセルがいるの
かいないのか、確認して下さい。
いない場合は、起動アクセス権が無いので、エラーとなっています。
メモリ上にいるが、エラーする場合は、オブジェクトの参照や起動権限まで
は成功しているが・・・何か権限的許可が無いようです。
見る部分が全て違いますので、DCOMCNFGをいじりたおして、何が正常なのか
見失うまでに、正常に戻しておくことが肝要です。
※ もうかなりいじくっておられるので、もしかしたら、正しく動作する様
なプログラムになっていても、権限の設定の失敗で成功しない・・・と言う
状態になっている可能性があります。
初手からじっくりとやりなおしてください・・・
以上。
ちょっと怖いですが踏ん切りが付いたら
上記の事柄は試して見たいと思います。
とりあえず今後のためステータスは解決にさせて頂きます。
どうもありがとうございました。
ツイート | ![]() |