ASP查询SQL数据并将结果导出到excel

handy_wzh 2009-02-05 08:14:58
在ASP中设置一些查询条件,查询出所要的数据并在WEB页面上以<table>显示出来
再从所显示的记录中用选择一些记录,通过点击按钮显示一个下载页面,可以自由选择保存路径。

各们高手,请帮帮忙了
...全文
1380 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
半山闲人 2009-02-14
  • 打赏
  • 举报
回复
晕,我说楼主,你总不能现搬我的东西吧,那些是我自己的东西,没有改,你只是看一下那个类的用法就行了吧,没理由不读代码就照搬我的东西,与其这样,你还不如叫我直接写个给你得了!
handy_wzh 2009-02-12
  • 打赏
  • 举报
回复
16楼的楼主:

<!--#include file="sub.asp" -->是一个什么样的文件,我试行的时候为什么提示没有这样的文件呢?

还有TypeNum=int(Request("TypeNum"))是从页面传递过来的什么参数?

急回,谢谢!!!
parss 2009-02-09
  • 打赏
  • 举报
回复

HTML code<%Response.Buffer=TRUEResponse.ContentType="application/vnd.ms-excel"Response.AddHeader"content-disposition","inline; filename = 用户信息.xls"%>
制作一个页面,页面的内容是你要导出来的信息,页面可以动态的(里面有代码),然后在页面前部加上这个导出代码。。。。就可以导出了
jypcxgzl 2009-02-09
  • 打赏
  • 举报
回复
建议用个隐藏域,用虚表来实现!
abeking 2009-02-09
  • 打赏
  • 举报
回复
看来每一行前头要加一个选择按钮了,设计起来不能说困难,只是太繁琐。
半山闲人 2009-02-09
  • 打赏
  • 举报
回复
现附上一个使用示例:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!--#include file="conn.asp" -->
<!--#include file="sub.asp" -->
<!--#include file="config/AspToExcel.Class.asp" -->
<html>
<head>
<title>导出Excel</title>
</head>
<body>
<%
'---获取页面参数---
TypeNum=int(Request("TypeNum"))

'---页面参数判断---
select case TypeNum
case 1 '请款资料导出
'---获取参数---
ClientID=Request("ClientID") '结账客户ID
ClientName=Request("ClientName") '结账客户名称
GatherMonth=Request("GatherMonth") '结账月份
OutProductCodeStr=Request("OutProductCodeStr") '结账出货单ID
if ClientID="" or ClientName="" or GatherMonth="" or OutProductCodeStr="" then response.Redirect("Wrong.asp") '判断关键参数不能为空
FolderName="UploadFile\请款资料\"&ClientName '导出文件路径
AutoCreateFolder(FolderName) '检查文件路径是否存在,不存在则创建
FileName=ClientName&GatherMonth&"请款资料" '导出文件名
sql="select 客户订号,日期,出货单号,产品名称,规格,单位,单价,数量,金额,备注 from 出货单库 where ID in ("&OutProductCodeStr&") and 终止=false order by 日期" '数据查询语句

'---Excel文件生成---
Set MyExcel = new Cls_Excel
With MyExcel
.ReportConn = conn
.ReportSql = sql
.ReportTitle = FileName
.RsFieldName = "订购单号||送货日期||送货单号||产品名称||规格||单位||单价||数量||金额||备注"
.RsFieldValue = "客户订号||日期||出货单号||产品名称||规格||单位||单价||数量||金额||备注"
.SaveFilePath = FolderName
.SaveFileName = FileName
.ColumnOffset = 1
.RowOffset = 1
End With
MyExcel.Worksheet()
MyExcel = Null
Set MyExcel = Nothing
end select
%>
</body>
</html>
<% closeDatabase %>
半山闲人 2009-02-09
  • 打赏
  • 举报
回复
我的思路是用一个专门的EXCEL文件生成类,这个类只需要提供标准查询语句就可以生成表,然后你把显示的记录前面加一个复选框,选中值为每条记录的ID,选中后提交就根据这些ID值生成查询SQL语句,在用EXCEL文件生成类生成EXCEL文件,我附一个EXCEL文件生成类给你:
AspToExcel.Class.asp

<%
'类开始
Class Cls_Excel
'声明常量、变量
Private objRs
Private objExcelApp
Private objExcelBook
Private Conn
Private Sql
Private Title
Private FieldName
Private FieldValue
Private FilePath
Private FileName
Private Col
Private Row
'Class_Initialize 类的初始化
Private Sub Class_Initialize()
Row = 1 '设定生成的Excel默认起始行
Col = 1 '设定生成的Excel默认起始列
End Sub
'ReportConn得到数据库连接对象
Public Property Let ReportConn(ByVal objConn)
Set Conn = objConn
End Property
'ReportSql得到SQL字符串
Public Property Let ReportSql(ByVal strSql)
Sql = strSql
End Property
'ReportTitle得到所要生成报表的标题
Public Property Let ReportTitle(ByVal strTitle)
Title = strTitle
End Property
'RsFieldName得到所要生成报表的列名称
Public Property Let RsFieldName(ByVal strName)
FieldName = Split(strName,"||")
End Property
'RsFieldValue得到所要生成报表的列值的数据库标识字段
Public Property Let RsFieldValue(ByVal strValue)
FieldValue = Split(strValue,"||")
End Property
'SaveFilePath得到Excel报表的保存路径
Public Property Let SaveFilePath(ByVal strFilePath)
FilePath = strFilePath
End Property
'SaveFileName得到Excel报表的保存文件名
Public Property Let SaveFileName(ByVal strFileName)
FileName = strFileName
End Property
'ColumnOffset得到Excel报表默认起始列
Public Property Let ColumnOffset(ByVal ColOff)
If ColOff > 0 then
Col = ColOff
Else
Col = 1
End If
End Property
'RowOffset得到Excel报表默认起始行
Public Property Let RowOffset(ByVal RowOff)
If RowOff > 0 then
Row = RowOff
Else
Row = 1
End If
End Property
'生成报表
Sub Worksheet()
Dim iCol,iRow,Num
iCol = Col
iRow = Row
Num = 1
Call DBRs()
Call ExcelApp()
Set objExcelBook = objExcelApp.Workbooks.Add
'写Excel标题
'--------------------------------------------------------
objExcelBook.WorkSheets(1).Cells(iRow,iCol).Value = Title
'--------------------------------------------------------
'写Excel各列名
'--------------------------------------------------------
iRow = Row + 1
objExcelBook.WorkSheets(1).Cells(iRow,iCol).Value = "序号"
iCol = iCol + 1
For i = 0 to Ubound(FieldName)
objExcelBook.WorkSheets(1).Cells(iRow,iCol).Value = FieldName(i)
iCol = iCol + 1
Next
'--------------------------------------------------------
'写Excel各列值
'--------------------------------------------------------
iRow = Row + 2
Do While Not objRS.EOF
iCol = Col
objExcelBook.WorkSheets(1).Cells(iRow,iCol).Value = Num
iCol = iCol + 1
For i = 0 to Ubound(FieldValue)
If IsNull(objRS(FieldValue(i))) then
objExcelBook.WorkSheets(1).Cells(iRow,iCol).Value = ""
Else
objExcelBook.WorkSheets(1).Cells(iRow,iCol).Value = objRS(FieldValue(i))
End If
iCol = iCol + 1
Next
objRS.MoveNext
iRow = iRow + 1
Num = Num + 1
Loop
'--------------------------------------------------------
Call SaveWorksheet()
End Sub
'创建Adodb.Recordset对象
Sub DBRs()
If IsObject(objRs) = True Then Exit Sub
Set objRs = Server.CreateObject("Adodb.Recordset")
objRs.Open Sql,Conn,1,1
If Err.Number > 0 Then
Response.End
End If
End Sub
'创建Excel.Application对象
Sub ExcelApp()
If IsObject(objExcelApp) = True Then Exit Sub
Set objExcelApp = Server.CreateObject("Excel.Application")
objExcelApp.DisplayAlerts=false '不显示警告
objExcelApp.Application.Visible=false '不显示界面
If Err.Number > 0 Then
Response.End
End If
End Sub
'保存Excel报表
Sub SaveWorksheet()
objExcelbook.SaveAs Server.MapPath(FilePath) & "\" & FileName & ".xls"
If Err.Number = 0 Then
Call Message("导出数据成功!")
Else
Call Message("导出数据失败!")
End If
End Sub
'信息提示
Sub Message(msg)
Response.Write("<script language='JavaScript'>")
Response.Write("alert('"&msg&"');")
Response.Write("</script>")
Response.Write("<a href='" & FilePath &"/" & FileName & ".xls'>")
Response.Write("点击下载文件</a>")
Response.End
End Sub
'Class_Terminate 类注销
Private Sub Class_Terminate()
objExcelApp.Application.Quit
Set objExcelBook = Nothing
Set objExcelApp = Nothing
objRs.Close
Set objRs = Nothing
End Sub
'类结束
End Class
%>
nevana 2009-02-06
  • 打赏
  • 举报
回复
FSO很多服务器禁用的,还是网上找个组件试试吧
zzxap 2009-02-06
  • 打赏
  • 举报
回复
<%

dim s,sql,filename,fs,myfile,x

Set fs = server.CreateObject("scripting.filesystemobject")
'--假设你想让生成的EXCEL文件做如下的存放
filename = Server.MapPath("order.xls")
'--如果原来的EXCEL文件存在的话删除它
if fs.FileExists(filename) then
fs.DeleteFile(filename)
end if
'--创建EXCEL文件
set myfile = fs.CreateTextFile(filename,true)

'Set rs = Server.CreateObject("ADODB.Recordset")
'--从数据库中把你想放到EXCEL中的数据查出来
'sql = "select * from Tb_Execl order by id desc"
'rs.Open sql,conn
StartTime = Request("StartTime")
EndTime = Request("EndTime")
StartEndTime = "AddTime between #"& StartTime &" 00:00:00# and #"& EndTime &" 23:59:59#"
strSql = "select * from ljphs200 "
Set rstData =conn.execute(strSql)
if not rstData.EOF and not rstData.BOF then

dim trLine,responsestr
strLine=""
For each x in rstData.fields
strLine = strLine & x.name & chr(9)
Next

'--将表的列名先写入EXCEL
myfile.writeline strLine

Do while Not rstData.EOF
strLine=""

for each x in rstData.Fields
strLine = strLine & x.value & chr(9)
next
myfile.writeline strLine

rstData.MoveNext
loop

end if
Response.Write "生成EXCEL文件成功,点击<a href="/"order.xls"" target=""_blank"">下载</a>!"
rstData.Close
set rstData = nothing
Conn.Close
Set Conn = nothing
%>
zzxap 2009-02-06
  • 打赏
  • 举报
回复
asp导出到excel

--------------------------------------------------------------------------------
在开头加上这一句
Response.ContentType = "application/vnd.ms-excel"
如果导出结果为空白的,那就去掉它

一下是导出Excel代码

--------------------------------------------------------------------------------
<%
set rs=server.createobject("adodb.recordset")
sql="select * from provinceinfo where 1=1"
rs.open sql,objconn,1,1
Set ExcelApp =CreateObject("Excel.Application")
ExcelApp.Application.Visible = True
Set ExcelBook = ExcelApp.Workbooks.Add
ExcelBook.WorkSheets(1).cells(1,1).value ="用户表"
ExcelBook.WorkSheets(1).cells(2,1).value = "用户编号"
ExcelBook.WorkSheets(1).cells(2,2).value = "登陆名"
ExcelBook.WorkSheets(1).cells(2,3).value = "真实姓名"
ExcelBook.WorkSheets(1).cells(2,4).value = "密码"
cnt =3
do while not rs.eof
ExcelBook.WorkSheets(1).cells(cnt,1).value = rs("provinceid")
ExcelBook.WorkSheets(1).cells(cnt,2).value = rs("province")
ExcelBook.WorkSheets(1).cells(cnt,3).value = rs("flag")
ExcelBook.WorkSheets(1).cells(cnt,4).value = rs("id")
rs.movenext
cnt = cint(cnt) + 1
loop
Excelbook.SaveAs "d:\yourfile.xls" '这个是数据导出完毕以后在D盘存成文件
ExcelApp.Application.Quit '导出以后退出Excel
Set ExcelApp = Nothing '注销Excel对象
%>

这是读取Excel表中数据例子
--------------------------------------------------------------------------------
sConn1="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("..")&"\temp\"&sNewFileName & ";Extended Properties=""Excel 8.0;HDR=NO;"""
oxls.Open "SELECT * FROM [sheet1$]",sConn1,1,3
oxls.movenext
oxls("f11")="1月"
oxls.update
...
oxls.Close
Set oxls=nothing
zzxap 2009-02-06
  • 打赏
  • 举报
回复
http://hi.baidu.com/xtalon/blog/item/3cac94ee1c4b39292cf53429.html
humucun 2009-02-06
  • 打赏
  • 举报
回复
大家所说的只是将ASP查询结果导出至excel,这个很简单,代码不超4行就可以实现。关键是楼主说的,报表生成后在查询结果中选择所需的数据,点击按钮导出,这个如何实现?
No_Data_Found 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nevana 的回复:]
FSO很多服务器禁用的,还是网上找个组件试试吧
[/Quote]

那就试试客户端操作

http://hi.baidu.com/yjdzh/blog/item/7443f0a8928f62b5cb130c1d.html
No_Data_Found 2009-02-06
  • 打赏
  • 举报
回复
2楼的办法不错

如果需要生成较为复杂的excel 请参考

http://tieba.baidu.com/f?kz=6668708
handy_wzh 2009-02-06
  • 打赏
  • 举报
回复
楼上的方法都不错,只是我要的结果是,报表生成后在查询结果中选择所需的数据,点击导出按钮,弹出一个下载对话框,而不是一个页面。
zhengjianbo4 2009-02-05
  • 打赏
  • 举报
回复
<% 
Response.Buffer = TRUE

Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "content-disposition", "inline; filename = 用户信息.xls"

%>

制作一个页面,页面的内容是你要导出来的信息,页面可以动态的(里面有代码),然后在页面前部加上这个导出代码。。。。就可以导出了
lifefamily 2009-02-05
  • 打赏
  • 举报
回复
很简单,一个FSO就OK了。


<%
dim s,sql,filename,fs,myfile,x
Set fs = server.CreateObject("scripting.filesystemobject")
'--假设你想让生成的EXCEL文件做如下的存放
filename = Server.MapPath("order.xls")
'--如果原来的EXCEL文件存在的话删除它
if fs.FileExists(filename) then
fs.DeleteFile(filename)
end if
'--创建EXCEL文件
set myfile = fs.CreateTextFile(filename,true)

'Set rs = Server.CreateObject("ADODB.Recordset")
'--从数据库中把你想放到EXCEL中的数据查出来
'sql = "select * from Tb_Execl order by id desc"
'rs.Open sql,conn
StartTime = Request("StartTime")
EndTime = Request("EndTime")
StartEndTime = "AddTime between #"& StartTime &" 00:00:00# and #"& EndTime &" 23:59:59#"

'strSql = "select * from survery_custom "

search=request("search")
'set rs=server.createobject("adodb.recordset")
strSql="select * from survery_custom"

if search=1 then
strSql=strSql & " where type like '%"&Trim(request("txtitle"))&"%'"
ElseIf search=2 then
strSql=strSql & " where nfrom like '%"&Trim(request("txtitle"))&"%'"
end If

strSql=strSql & " order by id desc"

Set rstData =conn.execute(strSql)
if not rstData.EOF and not rstData.BOF then

dim trLine,responsestr
strLine=""
For each x in rstData.fields
strLine = strLine & x.name & chr(9)
Next

'--将表的列名先写入EXCEL
myfile.writeline strLine

Do while Not rstData.EOF
strLine=""

for each x in rstData.Fields
strLine = strLine & x.value & chr(9)
next
myfile.writeline strLine

rstData.MoveNext
loop

end if

Response.Write "生成EXCEL文件成功,点击<a href=""order.xls"" target=""_blank""><font color=blue>下载</a></a>!"

rstData.Close
set rstData = Nothing

sql=strSql
%>
lovettian 2009-02-05
  • 打赏
  • 举报
回复
关注中

28,408

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧