在傳統 ASP/ADO 架構下,將資料庫存儲過程返回的記錄集動態填充至 HTML 表格模板,是產生可列印、可匯出報表的常用手法。本文提供一個極簡範例:預定義 HTML 模板字串,以佔位符標記動態區域,執行存儲過程後逐行替換生成最終報表。
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<TITLE>報表模板</TITLE>
<BODY>
<TABLE BORDER="1" cellpadding="0" cellspacing="0">
<TR>
<TH>公司名稱</TH> <TH>聯系人</TH> <TH>產品名稱</TH> <TH>單價</TH>
</TR>
<!-- DATA_ROWS_START -->
<TR>
<TD>Exotic Liquids</TD> <TD>Charlotte Cooper</TD> <TD>Chai</TD> <TD>18.0000</TD>
</TR>
<TR>
<TD>Exotic Liquids</TD> <TD>Charlotte Cooper</TD> <TD>Chang</TD> <TD>19.0000</TD>
</TR>
<!-- DATA_ROWS_END -->
</TABLE>
</BODY>
</HTML>
<%
' 1. 建立連線與命令物件
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=SQLOLEDB;Data Source=.;Initial Catalog=Northwind;Integrated Security=SSPI;"
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandText = "sp_GetProductReport" ' 存儲過程名
cmd.CommandType = adCmdStoredProc
' 2. 執行獲取記錄集
Set rs = cmd.Execute()
' 3. 讀取模板檔案
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(Server.MapPath("report_template.html"), 1)
strTemplate = ts.ReadAll
ts.Close
' 4. 定位動態區域標記
nStart = InStr(strTemplate, "<!-- DATA_ROWS_START -->")
nEnd = InStr(strTemplate, "<!-- DATA_ROWS_END -->")
strHeader = Left(strTemplate, nStart + Len("<!-- DATA_ROWS_START -->") - 1)
strFooter = Mid(strTemplate, nEnd)
' 5. 迴圈生成資料列
strRows = ""
Do Until rs.EOF
strRows = strRows & "<TR>" & _
"<TD>" & rs("CompanyName") & "</TD>" & _
"<TD>" & rs("ContactName") & "</TD>" & _
"<TD>" & rs("ProductName") & "</TD>" & _
"<TD>" & FormatNumber(rs("UnitPrice"), 4) & "</TD>" & _
"</TR>" & vbCrLf
rs.MoveNext
Loop
' 6. 組合輸出
Response.Write strHeader & strRows & strFooter
' 7. 清理
rs.Close: Set rs = Nothing
cmd.Close: Set cmd = Nothing
conn.Close: Set conn = Nothing
%>
CREATE PROCEDURE sp_GetProductReport
AS
BEGIN
SELECT s.CompanyName, s.ContactName, p.ProductName, p.UnitPrice
FROM Suppliers s
JOIN Products p ON s.SupplierID = p.SupplierID
ORDER BY s.CompanyName, p.ProductName
END
<style> 區塊,支援列交替色、hover 高亮。@media print { .page-break { page-break-after: always; } } 控制分頁。@StartDate, @EndDate, @CategoryID 等參數,ASP 傳遞 cmd.Parameters.Append。Response.ContentType = "application/vnd.ms-excel"、Response.AddHeader "Content-Disposition", "attachment;filename=report.xls"。生成的 HTML 直接在瀏覽器顯示為帶邊框的資料表格,公司名稱、聯系人、產品名稱、單價欄位整齊對齊,支援列印與另存為 Excel。
「模板字串 + 記錄集迴圈拼接」是零依賴、部署簡單的經典報表生成模式。雖然現代架構傾向於前端渲染或專業報表工具,但在維護舊系統、快速原型開發場景下,此法依然高效實用。