似たような質問があったのですが、解決できませんでしたので質問させて頂きます。
下記のプログラムで、ASPでExcelを起動後、マクロを実行させてたいと考えています。

Set objEx = Server.CreateObject(Excel.Application)
objEx.Application.Visible = True
objEx.Workbooks.Open "C:\Excel\hoge.xls"
objEx.Run("hoge.xls!Module1.macro1()")

しかし、excelがバックグラウンドで実行されて表示されないので困っています。表示させる方法はあるのでしょうか?
アドバイスお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

> excelがバックグラウンドで実行されて表示されないので困っています。



サーバーからすると、ASP から命令されて Excel を起動しようにも、表示させる場所がなくて困っていることでしょう。
というかどこに表示させたいのでしょうか?

サーバーにインストールされている Excel を ASP がキックして起動し、サーバーの画面に表示させたい、と?
Excel を起動させるユーザー アカウント は誰になるでしょうか?
そのユーザー アカウント でサーバーにログオンしてあり、起動した Excel を表示させられる状態になっている?
そうなっていないと思います。

ASP を実行しているのは多くの場合 IWAM_xxxx (xxxx はサーバーのホスト名) というアカウントですが、このアカウントが Excel を対話型に起動するためのデスクトップは無い状態ですよね。

こちらの情報をご確認ください。
http://support.microsoft.com/?id=257757
サーバーサイドで Excel 等をオートメーションで利用する事を考えている人への注意事項がまとめられています。
    • good
    • 0
この回答へのお礼

とても詳しい解説ありがとうございました。
スタンドアローンでテストしていたので、詳しいことが書けず申し訳ありません。
各クライアントごとにサーバー上のエクセルファイルを表示できるかということなのですが、参考サイトが為になりました。何か別の方法を考えてみます。
javaでできたので、できるかと思ったのですが。。。
ありがとうございました。

お礼日時:2009/05/25 21:13

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QASPから既存のexcelブックを開きたいです

件名どおり、ASPから既存のexcelブックを開きたいです。
サーバ上にあるexcelブックをただ開く(表示)させるだけでいいんですが。
できないものなのでしょうか。
エラー的には「オブジェクトがありません」がでてしまいます。

Aベストアンサー

Set objExcel = Server.CreateObject("Excel.Application")
これはサーバーの内部で Excel を起動するためのコード。
恐らくはこの後にサーバー内にある Excel のデーターファイルを開く処理を記述したいんだと思うが、サーバーが Excel ファイルを開いてみ意味がないし、サーバーに Excel をインストールしてるはずもないだろうし、一度に複数人がそのページを開こうとすると、同時閲覧者の数だけ Excel が起動するし、サーバーの内部で ASP の処理をしているアカウントはサーバーにログオンしたことがないアカウントだろうから Excel を起動させることもできないだろうし、、、
やっぱり意味がない。

ASP 云々の話ではなく、根本的な勘違いをしている。
今回の要望は、クライアント側のブラウザ上で、サーバーにある Excel ファイルを開きたいわけなので、ASP は特に関係ない。
Excel のデーターファイルにハイパー リンクを張る、通常の HTML の書き方だけで良い。

もし仮に
Set objExcel = Server.CreateObject("Excel.Application")
とかやるんだったら、サーバー側で Excel のデーターファイルを開き、シート上のセル値を読み取って、HTML のテーブルで表を作成して、読み取ったセル値を表示させる方法になってくる。
この場合、ブラウザ上に表示されるのは単なる HTML のテーブルであるので、ユーザーは Excel を起動するわけでなない。

Set objExcel = Server.CreateObject("Excel.Application")
これはサーバーの内部で Excel を起動するためのコード。
恐らくはこの後にサーバー内にある Excel のデーターファイルを開く処理を記述したいんだと思うが、サーバーが Excel ファイルを開いてみ意味がないし、サーバーに Excel をインストールしてるはずもないだろうし、一度に複数人がそのページを開こうとすると、同時閲覧者の数だけ Excel が起動するし、サーバーの内部で ASP の処理をしているアカウントはサーバーにログオンしたことがないア...続きを読む

QASPによるEXCELファイルの操作

宜しくお願いします。
サーバーに保管してあるEXCELテンプレートが保管してあります。
ASPを用いて、テンプレートの特定セルにデータを入力したのち
そのテンプレートをクライアント側のPCに保存したいのですが可能でしょうか。

ちなみに、自分のPC内(Localhost)では、下記のプログラムでうまく動いたのですが
サーバーに移すと、このプログラムのところでエラーが出ます。

初心者で見よう見まねでプログラムしているので、理屈等が理解できていないのですが
どなたかアドバイスいただけると幸いです。
宜しくお願いします。

'=================================================
'----- EXCEL作成
'=================================================
Sub excel_save()

Dim strFileName
Dim ex, wb, sh, objExcelBook

strFileName = "C:\Temp\報告書.xls"
Set ex = Server.CreateObject("Excel.Application")
ex.visible=false
ex.displayalerts=false
Set objExcelBook = ex.Workbooks.Open(strFileName)

Set wb = ex.activeworkbook
Set sh = wb.Sheets("報告書")
sh.Range("I3").Value = KanriNo

objExcelBook.SaveAs ("【" & KanriNo & "】報告書.xls")
objExcelBook.Close False
ex.Application.Quit
set sh = Nothing
Set wb = Nothing
Set objExcelBook = Nothing
Set ex = Nothing

End Sub

宜しくお願いします。
サーバーに保管してあるEXCELテンプレートが保管してあります。
ASPを用いて、テンプレートの特定セルにデータを入力したのち
そのテンプレートをクライアント側のPCに保存したいのですが可能でしょうか。

ちなみに、自分のPC内(Localhost)では、下記のプログラムでうまく動いたのですが
サーバーに移すと、このプログラムのところでエラーが出ます。

初心者で見よう見まねでプログラムしているので、理屈等が理解できていないのですが
どなたかアドバイスいただけると幸いです。
宜しく...続きを読む

Aベストアンサー

SaveAsは通常、絶対パス(ドライブ名からファイル名まで)で入力します。

QWebにてExcelを生成してダウンロード

VWD ASP.NET(VB) Excel2003

Webサーバー側に雛形Excelを配置し、ユーザーの指定により
DB情報をExcelに付加してダウンロードする方法を探しています。
以下のサイトに同じ発想の方がいましたが私はVBしかわかりません。
ユーザの利用は複数が同時に使用することも想定に考えると
以下のプログラムは安全なのかわかりません。
また、リンクが切れていて内容も理解できません。
何方かVBソースコードにて教えてください。
よろしくお願いいたします。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21390&forum=7

Aベストアンサー

No.1氏の回答では、雛形Excelは考慮できていません。

それよりも、そもそもサーバサイドで Excel を操作する事は推奨されていないので、方式を改めることを検討するのが無難です。詳細は下記(技術的にだけでなくライセンス的にも)。
http://support.microsoft.com/kb/257757/ja

やるなら OLEDB プロバイダで Excel をデータベースと見立てて更新することです。
http://www.cocoaliz.com/asp.net/index/41/

複数利用については、雛形ファイルをコピーする際にファイル名にセッションIDなどを付与してユニークなワークファイルを作って操作する必要があるでしょう。

QIIS7.5 Excel ファイルオープンエラー

■現状
現在、WindowsServer2003、IIS6.0、Excel2003でaspのプログラムを、WindowsServer2008 R2、IIS7.5に移行しているのですが、
登録等の動作は問題なく稼動しているのですが、Excelファイルの出力で
『Workbooks クラスの Open プロパティを取得できません。』
とエラーが出力され、Exelファイルへの出力ができません。Excel2003/2010ともに同じです。

insXlsApp = Server.CreateObject("Excel.Application")
insXlsBooks = insXlsApp.Workbooks
insXlsBook = insXlsBooks.Open(strPAth & "blank.xls")

Openのところでエラーになります。

■環境
WindowsServer2008 R2
IIS7.5
ASP.NET2.0
Excel2003/2010

■設定
web.config
・<identity impersonate="true"/>

IISのアプリケーションループの設定では、
・32bit → 有効
・マネージパイプラインモード →クラシック
・プロセスID → ApplicationPoolIdentity

DCOM設定
・Microsoft Excel Applicationのプロパティで「セキュリティ」→「起動とアクティブ化のアクセス許可」→「カスタマイズ」で
 IUSERに権限を付与。
 ※「ID」タブを選択し、ユーザーから「このユーザー」を選択、実行したときに与える権限を持つユーザーとパスワードを入力してもダメでした。

フォルダ
・エクセルが保存されているフォルダに、IUSER,administrator,EvereOneにフル権限を与えてみてもダメでした。

このやり方は非推奨なのは知っていますが、サーバー、クライアント全てにエクセルは入っています。
サードパーティ等他のやり方が良いのは重々承知の上で質問しています。
色々調べ試してみましたが上手くいきません。
どなたかお知恵を貸してください。よろしくお願いいたします。

■現状
現在、WindowsServer2003、IIS6.0、Excel2003でaspのプログラムを、WindowsServer2008 R2、IIS7.5に移行しているのですが、
登録等の動作は問題なく稼動しているのですが、Excelファイルの出力で
『Workbooks クラスの Open プロパティを取得できません。』
とエラーが出力され、Exelファイルへの出力ができません。Excel2003/2010ともに同じです。

insXlsApp = Server.CreateObject("Excel.Application")
insXlsBooks = insXlsApp.Workbooks
insXlsBook = insXlsBooks.Open(strPAth & "blank....続きを読む

Aベストアンサー

Openでエラーということで気になるのは実行しているアカウントに対話型のユーザーインタフェースの利用が許可されていない、あたりかと思います。

#確かそんなような名前の許可だったかと。

IIS 7.5の実行時のユーザーはデフォルトだと様々な制限を受けているアカウントなので、そのあたりの制限がひっかかっているかと思います。
デフォルトの制限項目を変更するのは確か難しかったと思うので、アカウントの偽装で回避するのがいいのかなぁ。。。

QASPでエクセルの起動

わかる方教えて下さい。
Set xlsApp=server.CreateObjec("Excel.Application")
Set xlsBook =xlsApp.Workbooks.Add
Set xlsSheet = xlsBook.Sheets.Add
xlsBook.Application.Visible = True

でASPからエクセルを起動したいと思いましたが、

『Server オブジェクト, ASP 0178 (0x80070005)
許可を確認中に Server.CreateObject の呼び出しに失敗しました。このオブジェクトへのアクセスは拒否されます。』 というエラーでエクセルが起動しません。

構文が悪いのでしょうか?
それともサーバー側で何か設定しなくてはいけないのでしょうか?
但しサーバーと言ってもWin2000 Professional のOsクライアントですが(当然IIS等はセットアップ済)それがいけないのでしょうか?

お願い致します。

Aベストアンサー

>少しずつ解ってきましたがまだまだです。
>この手で頑張ってみます。
>わがままなお願いですがもっと簡単な方法があったら>教えて下さい。
クライアントスクリプトが難しいなら、
1.EXCELブックはAuto_Open等立ち上げマクロでURL上のCSVデータをDLしシートに展開するマクロを作成
2.サーバサイドにそのマクロを持つEXCELブックを置く
3.サーバサイドで抽出データをURL参照できる所にCSV出力
4.HTML(BODY)内にEXCELブックのリンクを作成

この方法ならクライアント側のスクリプトは不要ですが
CSVデータのファイル名は固定しなければならず、
複数の要求が衝突する場合に制御できません。
下記URLの方法を応用すれば、
クライアントスクリプトでExcel側にCSVデータのURLを
動的に通知できるので、サーバ側では日時やSessionIDなどを
からめたファイル名を付けて衝突を避けられます。

同様に、CreateObjectでExcelをサーバサイドで
ハンドリングする場合、Excelは別インスタンスでも
同一ブック名のファイルを複数開くことはできません。
また、この手でエラーが起きると、
プロセスにExcelが居残ります。
この点でもサーバサイドでExcelを扱うのはお勧めできません。

>少しずつ解ってきましたがまだまだです。
>この手で頑張ってみます。
>わがままなお願いですがもっと簡単な方法があったら>教えて下さい。
クライアントスクリプトが難しいなら、
1.EXCELブックはAuto_Open等立ち上げマクロでURL上のCSVデータをDLしシートに展開するマクロを作成
2.サーバサイドにそのマクロを持つEXCELブックを置く
3.サーバサイドで抽出データをURL参照できる所にCSV出力
4.HTML(BODY)内にEXCELブックのリンクを作成

この方法ならクライアント側のスクリプトは不要ですが
CSVデー...続きを読む

Q【緊急】ASPでのExcel出力方法について

いつも参考にさせていただいております。

現在、aspで作成したweb環境を運用しております。

その中で抽出したデータをExcelに出力する処理がありますが、これを以下の方法で行っております。
====================================
response.buffer = true
response.ContentType = "application/vnd.ms-excel"
response.AddHeader "content-disposition", "inline; filename=dynamic.xls"
 ~
response.flush
response.end
====================================

ただ、「Excel2013」であることから、出力されたExcelを開くたびにバージョン不一致の警告(ファイル形式と拡張子が一致しません)が表示されて不便です。

よって、Excel出力をExcelオブジェクトを用いた方法に変更しようと考えております。
====================================
'ファイルシステムオブジェクト生成
Set oFs = Server.CreateObject("Scripting.FileSystemObject")

'テンポラリファイル名取得
sFileName = Split(oFs.GetTempName, ".")

'エクセルファイル名にする
sXlsName = sFileName(0) & ".xls"

'テンプレートが保存されているフォルダの物理パスを取得
sPath = oFs.GetFolder(Server.MapPath("/hogehoge/")).ParentFolder

'エクセルのオブジェクトを生成
Set oXls = Server.CreateObject("Excel.Application")

'エクセルのテンプレートファイルを開く
Set oTmp = oXls.Workbooks.Open(sPath & "\temlate\template.xls")
 ~
====================================



ここからが質問です。

Excelオブジェクト作成時、エラーになってオブジェクトの作成が失敗します。
====================================
【オブジェクト作成を「Server.CreateObject」で行った場合】
Set oXls = Server.CreateObject("Excel.Application")
⇒ 以下のエラーが表示されます。
  Server オブジェクト エラー 'ASP 0177 : 80080005'
  Server.CreateObject に失敗しました

【オブジェクト作成を「CreateObject」で行った場合】
Set oXls = CreateObject("Excel.Application")
⇒ 以下のエラーが表示されます。
  Microsoft VBScript 実行時エラー エラー '800a01ad'
  ActiveX コンポーネントはオブジェクトを作成できません。: 'Excel.Application'
====================================

いろいろなサイトを情報をもとに対応しましたが、解決の糸口が見えない状況です。
====================================
【今まで試みた対応】
(1)コンポーネントサービスの「DCOMの構成」にて、「Microsoft Excel Application」の「起動とアクティブ化のアクセス許可」に「EveryOne」を追加。
(2)以下のフォルダを用意してフォルダのアクセス許可に「EveryOne」を追加。
 C:\Windows\System32\config\systemprofile\Desktop
 C:\Windows\SysWOW64\config\systemprofile\Desktop
(3)オブジェクト作成時、「Excel.Application」を「Excel.Application.15」に変更。
====================================

なお、開発環境は以下となります。
====================================
【開発環境】
OS:windows 8.1 64bit
IIS:8.5
Excel:2013
その他:(1)aspを使用(.netではありません)
    (2)「windows 8.1」はあくまでテスト環境です。
     正常に動作することを確認後、本番環境「Win2008Server R2」に組み込む予定です。
====================================

私事ではありますが、スケジュール的に押し迫っております。

お忙しいところ申し訳ありませんが、解決方法のご教授をお願いいたします。

以上です。

いつも参考にさせていただいております。

現在、aspで作成したweb環境を運用しております。

その中で抽出したデータをExcelに出力する処理がありますが、これを以下の方法で行っております。
====================================
response.buffer = true
response.ContentType = "application/vnd.ms-excel"
response.AddHeader "content-disposition", "inline; filename=dynamic.xls"
 ~
response.flush
response.end
====================================

ただ、「Excel2013」であることから、出力され...続きを読む

Aベストアンサー

残念ながら、何重もの理由で、そのソリューションは成立しません。

・Excelのようなマルチスレッド未対応のオブジェクトをWebサーバで走らせると、確実に暴走するか、エラーで停止します。ExcelやAcrobatなど、何でも同じです。
・エラーが起きた後、メモリからオブジェクトが抹消されないため、あっという間にメモリリークを起こし、サーバがハングします。
・そもそも、ソフトウェアベンダは、Excelなどのアプリケーションをサーバ上で稼働させるライセンシーを認めていません。
・64biot OSのうえでレガシーASPが正常に動作する保証はありません。そもそも、32bitの2003サーバでさえ、ASPを動作させるためには多数の依存ライブラリをインストールする必要がありました。
FileSystemObjectやDictionaruObjectは間違いなく落ちます。
・Windows8.1/64bitと、Windows 2008R2サーバでは、IISのバージョンや動作スキームが完全に異なっており、32ビット依存コンポーネントのインストール状況が違います。
また、上記のセキュリティ設定も、サーバOSは根本的に異なります。

自分ならさっさと諦めて、その部分だけASPX仕様に変更し、Excel生成用のWebライセンスつき市販ライブラリを購入してカタをつけます。

Excel Creator
http://www.adv.co.jp/product/product_excelcreator2012.htm

Webサーバ上で正しいExcelデータを生成するということは、非常にコストのかかるタスクなのですよ。

それが予算の関係で不可能なら、CSVで我慢してもらうか、Office XLSXを解読して生成するか、HTMLかWell FormedなXMLを生成し、レスポンスヘッダを詐称して強引にエクセルに認識させる(要するに現在ご提示のNGな方法)かすることです。

回答になってなくて申し訳ありませんが、「やっても無駄」というお答えしかできません。
あしからず。

残念ながら、何重もの理由で、そのソリューションは成立しません。

・Excelのようなマルチスレッド未対応のオブジェクトをWebサーバで走らせると、確実に暴走するか、エラーで停止します。ExcelやAcrobatなど、何でも同じです。
・エラーが起きた後、メモリからオブジェクトが抹消されないため、あっという間にメモリリークを起こし、サーバがハングします。
・そもそも、ソフトウェアベンダは、Excelなどのアプリケーションをサーバ上で稼働させるライセンシーを認めていません。
・64biot OSのうえでレガシーAS...続きを読む

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QExcel で「OLE は現在使用できません」

Excelでファイルを開くと「OLE は現在使用できません」というメッセージが出力されます。
「OK」をクリックすれば一応ファイルは開けますが毎回出力されるので困っています。
Blaster以外でこのメッセージが出力される原因はありますでしょうか。

Excel2002(Windows 2003 Server)

Aベストアンサー

有るそうです

参考URL:http://support.microsoft.com/default.aspx?scid=kb;ja;264743

QASPからEXCELに出力する

ASP(VBS、JS、XML)等を使用してWEBページからボタンを
押した時に画面に表示されている表をEXCEL形式に
出力する方法を教えて下さい。
やっぱり複雑な表は難しいですかね?
またCSV形式でも構わないので、よろしくお願いします。

Aベストアンサー

ANo1.の回答のとおりです。
このやり方は、私の社内LANのHPでWebアプリケーションとして
数年前から使用しています。
出力は、Web形式(HTML形式)になりますので、適宜BOOK形式に変換(名を付けて保存)が必要です。
(留意点)
サンプルは、英語のサンプルなので日本語を含む場合は、以下のようにMETAタグを書き出します。 METAタグを書かないと文字化けが起きる可能性があります。
(1)response.write "<table width=200>"の前に次を挿入します。

 response.write "<html>"
response.write "<meta http-equiv=""Content-Type"" content=""text/html; charset=Shift_JIS"">"

(2)response.write "</table>"の後に、次を挿入します。

  response.write "</html>"





 


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報