仓酷云

标题: ASP网站制作之使用ASP制造EXECL报表办法 [打印本页]

作者: 飘飘悠悠    时间: 2015-2-16 00:25
标题: ASP网站制作之使用ASP制造EXECL报表办法
ASP是依赖组件的,能访问数据库的组件好多就有好多种,再有就是你微软的东西可是什么都要收钱的啊!   
良多时分咱们需求把表格模式的数据转换成EXECL的模式出现在用户眼前,个中有好几个办法可以做到一点,我将引见一种使用ASP完成的办法,该办法答应办事器静态地创立EXECL报表并且不必占用任何办事器空间。该办法还答应多个用户同时收到该数据。然而该办法最少需求EXECL 97的撑持。
空话少说,要完成这个任务最主要的是要告知阅读器HTTP头,就用以下代码:

<%
Response.ContentType = "application/vnd.ms-excel"
%>
上面来看一个例子,假定如今有以下模式的数据:
flavor qty_baked qty_eaten qty_sold price
Boston 24 2 10 0.5
Jelly 24 1 12 0.5
Strawberry 36 1 15 0.5
Chocolate 24 2 6 0.75
Maple 12 1 6 0.75
客户请求用EXECL的模式体现出来,而且但愿个中能加上其他一些盘算汇总
用以下代码:
……
<%
Response.ContentType = "application/vnd.ms-excel"
set conntemp=server.createobject("adodb.connection")
cnpath="DBQ=" & server.mappath("/stevesmith/data/timesheet.mdb")
conntemp.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & cnpath
set RS=conntemp.execute("select * from donut")
%>
<TABLE BORDER=1>
<TR>
<%
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
' % Loop through Fields Names and print out the Field Names
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
j = 2 'row counter
For i = 0 to RS.Fields.Count - 1
%>
<TD><B><% = RS(i).Name %></B></TD>
<% Next %>
<TD><B>On Hand (calculated)</B></TD>
<TD><B>Gross (calculated)</B></TD>
</TR>
<%
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
' % Loop through rows, displaying each field
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Do While Not RS.EOF
%>
<TR>
<% For i = 0 to RS.Fields.Count - 1
%>
<TD VALIGN=TOP><% = RS(i) %></TD>
<% Next %>
<TD>=b<%=j%>-c<%=j%>-d<%=j%></TD>
<TD>=d<%=j%>*e<%=j%></TD>
</TR>
<%
RS.MoveNext
j = j + 1
Loop
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
' % Make sure to close the Result Set and the Connection object
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
RS.Close
%>
<TR BGCOLOR=RED>
<TD>Totals</TD>
<TD>=SUM(B2:B6)</TD>
<TD>=SUM(C2:C6)</TD>
<TD>=SUM(D2:D6)</TD>
<TD>n/a</TD>
<TD>=SUM(F2:F6)</TD>
<TD>=SUM(G2:G6)</TD>
</TABLE>
……
如许咱们就完成了目标,用户可以在阅读器窗口就翻开它停止复杂操作,也能够保留到硬盘长进行其他操作。我还将引见一种使用filesystemobject操作的办法。请稍候。:) 空话少说,请看代码:
runquery.asp

<%@ LANGUAGE="VBSCRIPT" %>
<%
'DSNless connection to Access Database
strDSNPath = "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("testDB.mdb")
%>
<!--#include file="adovbs.inc" --> 请本人COPY这个文件
<%
server.scripttimeout=1000
Response.Buffer = True

if(Request.Form("ReturnAS") = "Content") then
Response.ContentType = "application/msexcel"
end if
Response.Expires = 0

dim oConn
dim oRS
dim strSQL
dim strFile

Set oConn = Server.CreateObject("ADODB.Connection")
Set oRS = Server.CreateObject("ADODB.Recordset")
strSQL = BuildSQL()

oRS.Open strSQL, strDSNPath, adOpenForwardOnly, adLockReadOnly, adCmdText
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Excel Export Demo</title>
</head>
<body>
<%
if(Request.Form("ReturnAS") = "CSV") then
CreateCSVFile()
else if(Request.Form("ReturnAS") = "Excel") then
CreateXlsFile()
else if(Request.Form("ReturnAS") = "HTML") then
GenHTML()
else if(Request.Form("ReturnAS") = "Content") then
GenHTML()
end if
end if
end if
end if

Set oRS = Nothing
Set oConn = Nothing
Response.Flush
%>
</body>
</html>
<SCRIPT LANGUAGE=vbscript RUNAT=Server>
Function BuildSQL()
dim strSQL
dim strTemp

strTemp = ""
strSQL = "select year, region, sales_amt from sales"

if(Request.Form("Year") <> "ALL") then
strTemp = " where Year = "
strTemp = strTemp & Request.Form("Year")
end if

if(Request.Form("Region") <> "ALL") then
if(Len(strTemp) > 0) then
strTemp = strTemp & " and Region = "
else
strTemp = strSTL & " where Region = "
end if
strTemp = strTemp & "'"
strTemp = strTemp & Request.Form("Region")
strTemp = strTemp & "'"
end if
BuildSQL = strSQL & strTemp
End Function
Function GenFileName()
dim fname

fname = "File"
systime=now()
fname= fname & cstr(year(systime)) & cstr(month(systime)) & cstr(day(systime))
fname= fname & cstr(hour(systime)) & cstr(minute(systime)) & cstr(second(systime))
GenFileName = fname
End Function
Function GenHTML()
Response.Write("<DIV ALIGN=center><FONT SIZE=+1>Sales Reporting</FONT></DIV>")
Response.Write("<TABLE WIDTH=100% BORDER=1 CELLSPACING=1 CELLPADDING=1>")
Response.Write("<TR>")
Response.Write(" <TD>Year</TD>")
Response.Write(" <TD>Region</TD>")
Response.Write(" <TD>Sales</TD>")
Response.Write("</TR>")
if(oRS.BOF = True and oRS.EOF = True) then
Response.Write("Database Empty")
else
oRS.MoveFirst
Do While Not oRS.EOF
Response.Write("<TR>")
Response.Write("<TD>")
Response.Write(oRS.Fields("Year").Value)
Response.Write("</TD>")
Response.Write("<TD>")
Response.Write(oRS.Fields("Region").Value)
Response.Write("</TD>")
Response.Write("<TD>")
Response.Write(oRS.Fields("Sales_Amt").Value)
Response.Write("</TD>")
Response.Write("</TR>")
oRS.MoveNext
Loop
Response.Write("</TABLE>")
End if
End Function
Function CreateCSVFile()
strFile = GenFileName()
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(server.MapPath(".") & "\" & strFile & ".csv",True)
If Not oRS.EOF Then
strtext = chr(34) & "Year" & chr(34) & ","
strtext = strtext & chr(34) & "Region" & chr(34) & ","
strtext = strtext & chr(34) & "Sales" & chr(34) & ","
a.WriteLine(strtext)
Do Until oRS.EOF
For i = 0 To oRS.fields.Count-1
strtext = chr(34) & oRS.fields(i) & chr(34) & ","
a.Write(strtext)
Next
a.Writeline()
oRS.MoveNext
Loop
End If
a.Close
Set fs=Nothing
Response.Write("Click <A HRef=" & strFile & ".csv>Here</A> to to get CSV file")
End Function
Function CreateXlsFile()
Dim xlWorkSheet ' Excel Worksheet object
Dim xlApplication

Set xlApplication = CreateObject("Excel.application")
xlApplication.Visible = False
xlApplication.Workbooks.Add
Set xlWorksheet = xlApplication.Worksheets(1)
xlWorksheet.Cells(1,1).Value = "Year"
xlWorksheet.Cells(1,1).Interior.ColorIndex = 5
xlWorksheet.Cells(1,2).Value = "Region"
xlWorksheet.Cells(1,2).Interior.ColorIndex = 5
xlWorksheet.Cells(1,3).Value = "Sales"
xlWorksheet.Cells(1,3).Interior.ColorIndex = 5

iRow = 2
If Not oRS.EOF Then
Do Until oRS.EOF
For i = 0 To oRS.fields.Count-1
xlWorksheet.Cells(iRow,i + 1).Value = oRS.fields(i)
xlWorkSheet.Cells(iRow,i + 1).Interior.ColorIndex = 4
Next
iRow = iRow + 1
oRS.MoveNext
Loop
End If
strFile = GenFileName()
xlWorksheet.SaveAs Server.MapPath(".") & "\" & strFile & ".xls"
xlApplication.Quit ' Close the Workbook
Set xlWorksheet = Nothing
Set xlApplication = Nothing
Response.Write("Click <A HRef=" & strFile & ".xls>Here</A> to get XLS file")
End Function
</script>
%>
main.htm
<!-- frames -->
<FRAMESET ROWS="20%,*">
<FRAME NAME="Request" SRC="request.html" MARGINWIDTH="10" MARGINHEIGHT="10" SCROLLING="auto" FRAMEBORDER="yes">
<FRAME NAME="Result" SRC="welcome.html" MARGINWIDTH="10" MARGINHEIGHT="10" SCROLLING="auto" FRAMEBORDER="yes">
</FRAMESET>
request.htm
<html>
<head>
<title>Sales Report Demo</title>
</head>
<body>
<DIV ALIGN="center"><FONT SIZE="+1">Sales Reporting</FONT></DIV>
<FORM ACTION="runquery.asp" METHOD="POST" target=Result>
Year <SELECT NAME="Year">
<OPTION VALUE="ALL">ALL</OPTION>
<OPTION VALUE="1995">1995</OPTION>
<OPTION VALUE="1996">1996</OPTION>
<OPTION VALUE="1997">1997</OPTION>
<OPTION VALUE="1998">1998</OPTION>
<OPTION VALUE="1999">1999</OPTION>
</SELECT>
?
Region <SELECT NAME="Region">
<OPTION VALUE="ALL">ALL</OPTION>
<OPTION VALUE="North">North</OPTION>
<OPTION VALUE="East">East</OPTION>
<OPTION VALUE="South">South</OPTION>
<OPTION VALUE="West">West</OPTION>
</SELECT>
?
Return Results Using
<SELECT NAME="ReturnAS">
<OPTION VALUE="HTML">HTML Table</OPTION>
<OPTION VALUE="Content">Content Type</OPTION>
<OPTION VALUE="CSV">CSV</OPTION>
<OPTION VALUE="Excel">Native Excel</OPTION>
</SELECT>
<INPUT TYPE="Submit" NAME="Submit" VALUE="Submit">
</FORM>
</body>
</html>
welcome.htm
<html>
<head>
<title>Sales Report Demo</title>
</head>
<body>

</body>
</html>
数据库布局
testDB.Mdb
表sales
year 数字
Region 文本
Sales_Amt 泉币
本文原始出处为国外一网站,并经由BATMAN的休正。


  ASP脚本是采用明文(plain text)方式来编写的。
作者: 不帅    时间: 2015-2-16 01:13
运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
作者: 因胸联盟    时间: 2015-2-16 21:33
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
作者: 小魔女    时间: 2015-2-16 23:17
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
作者: 深爱那片海    时间: 2015-3-1 19:32
多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
作者: 灵魂腐蚀    时间: 2015-3-1 22:49
如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。
作者: 小妖女    时间: 2015-3-11 00:13
如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。
作者: 变相怪杰    时间: 2015-3-16 07:54
虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。
作者: 只想知道    时间: 2015-3-20 13:27
运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
作者: 乐观    时间: 2015-3-27 08:13
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
作者: 金色的骷髅    时间: 2015-4-1 01:26
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
作者: 海妖    时间: 2015-4-14 17:16
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
作者: 第二个灵魂    时间: 2015-4-24 01:34
我想问如何掌握学习节奏(先学什么再学什么)最好详细点?
作者: 若相依    时间: 2015-4-25 15:18
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
作者: 再见西城    时间: 2015-5-11 23:39
多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
作者: 飘灵儿    时间: 2015-6-12 22:36
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
作者: 若天明    时间: 2015-6-18 01:04
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
作者: 透明    时间: 2015-6-20 04:55
交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。
作者: 柔情似水    时间: 2015-7-2 03:41
不能只是将它停留在纸上谈兵的程度上。
作者: 山那边是海    时间: 2015-7-7 08:31
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
作者: admin    时间: 2015-7-12 21:37
我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2