精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● ASP>>数据库>>EXCEL>>Re:怎样强制下载数据库文件成excel文件

主题:Re:怎样强制下载数据库文件成excel文件
发信人: ahakka()
整理人: qcrsoft(2002-05-13 01:08:28), 站内信件
但愿下列的文章对你有帮助!

利用ASP制作EXECL报表方法  (转载)

很多时候我们需要把表格形式的数据转换成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><% = RS(i).Name %></TD>
    <% Next %>
    <TD>On Hand (calculated)</TD>
    <TD>Gross (calculated)</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</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 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 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</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的休正。



----
专家并非什么都会,何况我不是专家!

[关闭][返回]