【最大10000ポイント】当たる!!質問投稿キャンペーン!

ASPでホームページを作っています。

クライアントが、ある表を表示するホームページを見るとサーバー側に表示されている表と同じエクセルファイルを
作成させたいです。 そして、そのファイルにアンカー
タグを張ったページから、エクセルファイルをダウンロードさせたいのです。

注意)エクセルファイルは、CSVではなく純粋なエクセルファイル(vbsでセル幅を変更できる)です。

どなたか、アドバイスをよろしくお願いします。

A 回答 (2件)

作成したExcelをどっかにとっておきたいのなら、こんなのどうでしょう?


まず、そのページと同じレイアウトでExcelファイルを作成し(temp.xls等)適当なディレクトリにおいておく。
んで、ページが表示されたときにあらかじめ用意しておいたExcelをコピーして(もちろん名前は変える)、同じデータで書込み、保存してリンク先を指定する。

'Excelオブジェクトの作成
Set objExcel = Server.CreateObject("Excel.Application")
objExcel.Application.DisplayAlerts = False
Set objExcelBook = objExcel.Workbooks.Open(Server.MapPath("ファイルを置いたディレクトリ/temp.xls"))

-----ここに書き込み処理-------

'Excelの保存
objExcelBook.SaveAs Server.MapPath("作成したいファイル名")
objExcel.Application.DisplayAlerts = true
objExcelBook.close
Set objExcelBook = nothing
   ・
   ・
   ・
<a href=Server.MapPath("ファイルを置いたディレクトリ/作成したファイル名")></a>

みたいな感じで・・・
    • good
    • 0

response.ContentType = "application/vnd.ms-excel"


の後、CSVまたは<table>タグを吐くとか

参考URL:http://www.microsoft.com/japan/msdn/weeklynews/w …
    • good
    • 0

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

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

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

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

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...続きを読む

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>"





 

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などを付与してユニークなワークファイルを作って操作する必要があるでしょう。

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は通常、絶対パス(ドライブ名からファイル名まで)で入力します。

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デー...続きを読む

QASPでCSVファイルを作成しダウンロードさせる

ASPファイルで、動的にCSVファイルを作成し、クライアントにダウンロードさせたいのですが、実際には、ファイルは作成せずに、ASPで直接、CSVフォーマットのファイルをダウンロードさせているように振舞わせることはできないでしょうか?

手順
クライアント        サーバー
あるURL(A.ASP)にアクセス
             A.ASPのスクリプトでCSVフォーマットを作成
             クライアントに送信(多分、Response.Writeで)
ダウンロードダイアログが開く
「A.CSVをダウンロードしますか?」
のような感じ
ダウンロード、またはExcelが開く

というようなイメージです。
CSVファイルを作ってしまうと、複数のユーザーからほぼ同時に要求があった場合、望むCSVにならない可能性があり、また、毎回ファイル名を変えると、Webサーバー上にCSVファイルが沢山できてしまうため、何とかこの方法でやりたいのですが、何かよい方法はありませんでしょうか?

ちなみに次のようなASPファイルをしてみましたが、うまくいきません。

<%
Response.Content-Type="application/vnd.ms-excel"
Response.Write "1,2" & vbNewLine
Response.Write "3,4" & vbNewLine
%>
また、「vnd.ms-excel」を「oct-stream」でもだめでした。
何かよい知恵をお貸しください。

ASPファイルで、動的にCSVファイルを作成し、クライアントにダウンロードさせたいのですが、実際には、ファイルは作成せずに、ASPで直接、CSVフォーマットのファイルをダウンロードさせているように振舞わせることはできないでしょうか?

手順
クライアント        サーバー
あるURL(A.ASP)にアクセス
             A.ASPのスクリプトでCSVフォーマットを作成
             クライアントに送信(多分、Response.Writeで)
ダウンロードダイアログが開く
「A.CSVをダ...続きを読む

Aベストアンサー

これでOK!です。

<%
Response.AddHeader "Content-disposition", "filename=""motteke.csv"""
Response.ContentType="text/csv"
Response.Write "1,2" & vbNewLine
Response.Write "3,4" & vbNewLine
%>

"text/csv"は適当です(笑)

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で画面間のパラメタ受け渡し

こんばんは。ASP初心者です。
ASPでWEBページの作成を行っています。画面遷移をResponse.Redirect()で行っているのですが、遷移前のページと遷移後のページでパラメタを受け渡したい場合はSession("hoge") = "hogehoge"のようにセッションに入れる以外、何か方法はないでしょうか。リクエスト間でパラメタ渡せればがいいので、セッションを通じて保持しておく必要がないのです。クエリを使用するとアドレス欄に変数の値が見えてしまうのでできれば使いたくありません。

Aベストアンサー

1. Cookieを使う
2. 画面遷移を postで行い、hidden項目に値をセットする (要JavaScript)

私は面倒なのでセッション変数使ってますが、必要なくなればセッションをクリアすれば良いだけだと思います。

Session.Contents("hoge") = Empty

QWebページ上のボタン等の位置を移動したい。

こんにちわ。
いまASP.NETのWebフォームにパネルを置いて,その上にボタンなどのオブジェクトを配置しようとしています。
ところがフォームに直接ボタンを配置するときは,
任意の位置に配置できるのですが,
パネルの上だと任意の位置に配置できません。
VBのようにプロパティでx/y座標を指定しようと思ったのですが,
それらしいプロパティが見当たりません。
どうすれば任意の位置に配置できるでしょうか?
教えてください。よろしくお願いします。

Aベストアンサー

#1 です。

WebForm で何もコントロールを選択していない状態か、新規の WebForm で [レイアウト]-[位置]-[自動配置オプション] を選択。
<オプション> ダイアログの左側 [HTML デザイナ]-[CSS 配置] が開いてる状態になりますので、右側の配置オプションで [ツールボックス、貼り付け、またはドラッグ・・・] にチェックを入れて「絶対配置」を選択して [OK] をクリック。
コレ以降フォームに貼り付けたコントロールは絶対配置になりますので好きな場所に移動できます。

って方法もありますね。

QJavaScriptからVBScriptの呼び出しについて

JavaScriptからVBScriptで作った関数を呼び出すことは可能なのでしょうか?
可能なのであれば、やりかたを教えてください。

Aベストアンサー

できますよ。
別のスクリプトタグの中で定義した関数は、普通に呼び出せますので。

<script language=vbscript>
function hoge(arg)
hoge=arg*5
end function
</script>
<script language=javascript>
document.write(hoge(6));
</script>

とか。
逆もしかりです。


人気Q&Aランキング