アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、以下の方法でWebより帳票(Excel)を表示しています。

1.ASPにてSQLを実行し、データベース(Oracle8i)よりレコードセット
を取得する。
2.取得したレコードセットを、XMLで保持する。
3.XMLを、XSLで指定した形式で、Htmlに変換する(JavaScriptの
transformNodeで)
4.変換したHtmlを、クリップボードに退避する。
5.JavaScriptのActiveXObject("Excel.Application")で、
Excelを起動する。
6.Workbooks.Open("[テンプレート名]")で、Excelテンプレート
を立ち上げる。
7.ExcelのBookに、クリップボードに退避したHtmlを貼り付ける。

以上の手順を踏むと、ExcelにHtmlで書かれたとおりの表が表示される
仕組みです。
しかし、この方法だと、大量のデータ件数(横50列、1000件以上)で
ある場合、貼り付けに非常に時間がかかり、タイムアウトしてしまいます。
(ExcelがHtmlを解釈するのに時間がかかるせいだと思うのですが・・・)
せめて横50列以上、2万件以上のデータ量に耐えられる仕組みにしなければ
なりません。
以下の仕様は極力守りつつ、なにか良い方法はないでしょうか。

a.データはなるべくXMLから取得したい
b.帳票を出力するツールはExcelとしたい

aについては、データはレコードセットでも構いません。
bについては、何か他に良い帳票ツールがあれば教えて下さい。
どうぞよろしくお願いします。

●環境
IE:5.5
Excel:97(SR-2)
DB:Oracle8i

A 回答 (2件)

以下のようにすれば画面が表示された後で、クライアント側でExcelが立ち上がり、レコードが記入されていくと思います。






<SCRIPT LANGUAGE="VBScript">
Sub CreateFile()
Set objExcel = CreateObject("Excel.Application")
Set objBook = objExcel.Workbooks.Open("[テンプレート名]")
Set objSheet = objBook.Worksheets(1)

'Excelを表示する
objExcel.Visible = True

<%
'レコードセット
objRS.Open ・・・

i = 1
Do Until objRS.EOF
%>
objSheet.Range("B<%=i%>").Value = "<%=objRS("[列名1]")%>"
objSheet.Range("C<%=i%>").Value = "<%=objRS("[列名2]")%>"
<%
objRS.MoveNext
Loop

objRS.Close
Set objRS = Nothing
%>

objBook.SaveAs [保存ファイル名]
objBook.Close
Set objBook = Nothing

objExcel.Quit
Set objExcel = Nothing

End Sub
</SCRIPT>
</HEAD>
<BODY onLoad="CreateFile();">


    • good
    • 0

サーバー側でXMLからPDFを生成して、そのPDFをダウンロードしてプリントするというのはいかがでしょう?

    • good
    • 0

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