ASP生成excel表格.docx
《ASP生成excel表格.docx》由会员分享,可在线阅读,更多相关《ASP生成excel表格.docx(24页珍藏版)》请在冰豆网上搜索。
ASP生成excel表格
ASP生成excel表格!
<%dimexcelstring
dimexcelstr
dimexcelstr2
dimhead
excelstring=""
head="Sn"&","&"Reason"&","&"Empid"&","&"Empname"&","&"Ext"&","&"Depname"excel="creat"
Ifexcel<>""Then
Setrs2=Server.CreateObject("ADODB.Recordset")
sql2="Select*fromvalue_table"
rs2.opensql2,conn,1,3
dowhilenotrs2.eof
excelstr=""&rs2(0)&""","""&rs2
(1)&""","""&rs2
(2)&""","""&rs2(3)&""","""&rs2(4)&""","""&rs2(5)&""""
excelstr2=excelstr2&Chr(13)&excelstr
rs2.movenext
loop
excelstring=head&Chr(13)&excelstr2
'response.Write(excelstring)
'rs2.close
Setrs2=Nothing
setfs=CreateObject("scripting.FileSystemObject")
setexc=fs.OpenTextFile(server.MapPath("excel.csv"),2,True)
exc.write(excelstring)
iffs.FileExists(Server.MapPath("excel.csv"))then
Response.Write("报表已经生成,点击查看")
'Response.write(excelstring)
else
Response.Write("生成报表失败!
")
endif
Endif%>
调试通过!
----------------------------------------------------------------------------------------------
这可能是将一个html表格变成MicrosoftExcel格式的最快方法。
ContentType属性通知浏览器数据要被格式化为何种格式,在这里我们要的格式是MicrosoftExcel。
当浏览器看到这个属性的值是Excel时,它就提示用户保存或打开这个文件。
如果用户选择打开文件,就启动了Excel并在其中观看数据。
为使其工作正确,必须在向Response对象写入任何内容之前设置ContentType。
此语法的例子如下:
Line1:
〈%@LANGUAGE="VBSCRIPT"%〉
Line2:
Response.ContentType="application/msexcel"
Line3:
%〉
点击这里可以得到有关ASP的Response对象的ContentType属性的更多信息。
当我试图用InternetExplorer4.x.测试时发现了一个问题,在Microsoft文章Q185978曾经提到过。
这篇知识库文章的内容可以概括如下:
“如果InternetExplorer与一个动态生成Word、Excel或其它活动文档的Web服务器资源相连接时,InternetExplorer会为此资源发出两个GET请求。
第二个GET通常没有session状态信息、临时cookies或者已经为客户指定的证明信息。
这个错误可能影响到任何寄宿在InternetExplorer结构窗口内的本地服务器(EXE)的活动文档应用程序。
它在ISAPI、ASP或CGI应用程序中发生最为频繁,它们校验HTTP"ContentType"头文件以识别所安装的应用程序”。
因此如果你尝试使用session变量或cookies,并使用IE4,就有可能遭遇到这个错误。
经证实,在IE5中这个问题已经得到解决。
一个用逗号分隔开的值文件是将web页面输出到Excel可读格式的第二种选择。
这种格式比ContentType属性有更大的灵活性。
相对于其它方法,CSV还有两个优势:
首先,不需要任何客户机或服务器上的软件去创建它,第二,文件通常要比一个Excel文件小。
CSV格式的定义如下:
逗号分隔列,回车分隔行。
逗号作为分隔符,也会与包含逗号的域(如$1,234)引发一个问题;这会在将要创建的行中导致一个额外的列。
这个问题也很容易矫正,方法是在每个结尾处用逗号将域封闭起来。
在提供的例子中把CreateCSVFile()函数过一遍,就能了解CSV文件是如何创建的。
Line1:
strFile=GenFileName()
Line2:
Setfs=CreateObject("Scripting.FileSystemObject")
Line3:
Seta=fs.CreateTextFile(server.MapPath(".")&""&strFile&Line4:
".csv",True)
Line5:
IfNotoRS.EOFThen
Line6:
strtext=chr(34)&"Year"&chr(34)&","
Line7:
strtext=strtext&chr(34)&"Region"&chr(34)&","
Line8:
strtext=strtext&chr(34)&"Sales"&chr(34)&","
Line9:
a.WriteLine(strtext)
Line10:
DoUntiloRS.EOF
Line11:
Fori=0TooRS.fields.Count-1
Line12:
strtext=chr(34)&oRS.fields(i)&chr(34)Line13:
&","
Line14:
a.Write(strtext)
Line15:
Next
Line16:
a.Writeline()
Line17:
oRS.MoveNext
Line18:
Loop
Line19:
EndIf
Line20:
a.Close
Line21:
Setfs=Nothing
Line22:
Response.Write("Click〈AHREF="&strFile&".csv〉Here〈/A〉
Line23:
togetCSVfile")
第一行调用GenFileName()函数创建一个唯一的文件名,有关GenFileName()函数将在稍后讨论。
第2行到第4行,用FileSystemObject对象和CreateTextFile函数将要写入的文本文件。
在这个例子中,所写入的文件与源文件在同一个路径下,在实际工作中,你也许想要创建一个单独的路径存储这些文件。
第5-9行产生第一行的标题。
因为报告通常都是相同的,我就把列名的代码固定下来,虽然也有可能读数据库的列名并使用它们。
注意我在各个域中是如何包含逗号的。
使用WriteLine函数将它们与一个回车一起发送到文件中。
第10行到18行在记录集中循环,用引号给每个域做出标志,后面跟着一个逗号。
然后Write函数将每个域发送到文件。
WriteLine用回车结束每一行。
最后几行关闭文件、释放对象、在页面上放置一个链接以便能够找回它。
当你点击生成的链接时,就会被提示保存或打开。
如果选择打开,文件就在Excel中打开(假设计算机上已经安装)。
如果选择了保存,就将这个文本文件保存到存储设备上并将它输入各个应用程序中。
我所讨论的最后一种方法是用MicrosoftExcel对象创建一个实际的Excel(.xls)文件。
要使用这些对象要求在Web服务器上安装Excel。
使用这些控制可以对格式化有更多的控制(如字体、颜色等),并允许你进行一切在真正的Excel应用程序中可以进行的操作。
一定要监视你的服务器的性能,因为Excel可能成为一个相当大的对象并对性能造成冲击,这取决于你如何使用它以及服务器有多忙。
我发现在Excel对象上得到更多信息的最快最简便的方法是使用VisualBasic对象浏览器,观看对象并使用上下文敏感帮助来得到更多细节。
使用这个对象浏览器时:
启动VisualBasic,创建一个工程文件,增加一个对MicrosoftExcel对象库的引用。
在View菜单下,可以选择一个对象浏览器然后指定Excel库,看到所有可用的对象。
按F1可得到当前标题的上下文敏感帮助。
在所提供的样本中把CreateXlsFile()函数过一遍,就可以看到如何创建一个Excel文件。
基本步骤与创建CSV文件的基本相同,只是所创建的是一个Excel工作表。
Line1:
DimxlWorkSheet
Line2:
DimxlApplication
Line3:
SetxlApplication=Server.CreateObject("Excel.Application")
Line4:
xApplication.Visible=False
Line5:
xlApplication.Workbooks.Add
Line6:
SetxlWorksheet=xlApplication.Worksheets
(1)
Line7:
xlWorksheet.Cells(1,1).Value="Year"
Line8:
xlWorksheet.Cells(1,1).Interior.ColorIndex=5
Line9:
xlWorksheet.Cells(1,2).Value="Region"
Line10:
xlWorksheet.Cells(1,2).Interior.ColorIndex=5
Line11:
xlWorksheet.Cells(1,3).Value="Sales"
Line12:
xlWorksheet.Cells(1,3).Interior.ColorIndex=5
Line13:
iRow=2
Line14:
IfNotoRS.EOFThen
Line15:
DoUntiloRS.EOF
Line16:
Fori=0TooRS.fields.Count-1
Line17:
xlWorksheet.Cells(iRow,i+1).Value=oRS.fields(i)
Line18:
xlWorkSheet.Cells(iRow,i+1).Interior.ColorIndex=4
Line19:
Next
Line20:
iRow=iRow+1
Line21:
oRS.MoveNext
Line22:
Loop
Line23:
EndIf
Line24:
strFile=GenFileName()
Line25:
xlWorksheet.SaveAsServer.MapPath(".")&""&strFile&".xls"
Line26:
xlApplication.Quit'ClosetheWorkbook
Line27:
SetxlWorksheet=Nothing
Line28:
SetxlApplication=Nothing
Line29:
Response.Write("Click〈AHRef="&strFile&".xls〉Here〈/A〉
toLine30:
getXLSfile")
第1行和第2行,确定所使用的Excel对象的维数。
第3行,创建Excel对象。
同样,为了工作正确,web服务器上也必须有Excel。
第4行,将Excel的可见性设置为false,这样它就没有界面了。
第5行和第6行,增加一个容纳工作表的工作簿,然后将当前工作表设置成第一个工作表(这是Excel在默认状态下创建的)。
还可以用Worksheet对象的Add函数增加一个新的工作表,这就允许你的Excel文件中有多个工作表。
第8-12行,创建工作表的标题。
在这个例子中,我们把每个单元的值都设置成适当的标题,而且把内部颜色设置成兰色。
你还可以用Range对象同时修改多个单元。
第13-23行,提供从记录集装载所有数据的循环。
因为第一行中包含标题,我就在电子数据表的第二行开始数据。
里面的For循环把每一列装载到行中,并把内部颜色设置为绿色。
外部循环则为每一行在记录集中进行循环。
第24行,通过调用GenFileName()函数,与CSV用同样的函数来创建唯一的文件名。
第25行,进行电子表格的实际保存。
可以将表格存储为Excel中指定的多种格式。
下面的3行进行对象的整理。
作为一个好的ASP程序员,就一定要整理所有的对象。
最后,我把到Excel文件的链接放在页面上以便下载。
我创建了一个样本,对以上讨论过的每个技巧进行示范。
要安装样本,只需要把所有的文件复制到服务器上,用main.html启动应用程序。
在服务器上需要有Excel以使用"NativeExcel"选项。
样本使用一个Access数据库(无DSN链接)来存储销售数据。
你可以选择一年或一个地区进行销售报告。
最后的选项是你希望如何返回数据。
可以看到以下的屏幕映象:
下面的表格中是对样本中提供的所有文件的描述。
文件名描述
DSN-SQL.asp包含无DSN链接字符串
adovbs.inc包含ADO常量
TestDB.mdb包含销售数据的一个Access97数据库。
包含的销售表格有3个域:
year--Text,region--Text,sales-amt--numeric
main.html本文件创建画面的框架并装载初始页
welcome.html本文件只在第一次创建结果通常所在的画面框架时使用
request.html包含一个表单,用来收集用户的选择来建立报告
runquery.asp应用程序的内脏。
本文件建立SQL声明、确定客户机如何请求将被返回的数据、执行SQL并按照请求返回数据
大部分代码都相当容易理解。
但是我还是要讨论runquery.asp文件中的一些函数。
我已经演示过如何创建CSV和Excel文件。
GenHTML()函数建立一个被请求数据的HTML表格。
这个函数既用来作为HTML返回也用于ContentType请求。
为了ContentType请求工作,你要注意Response.ContentType="application/msexcel"是将要执行的最初几行之一。
GenFileName()函数使用系统日期建立文件名的第一部分。
这个文件名将是唯一的,这样当你试图存储文件时就可以避免许多麻烦。
扩展名(CSV或XLS)在存储文件时应用,这样就允许同一个函数产生两种类型的文件。
BuildSQL()函数使用表单变量来建立一个SQL声明,与用户的请求相匹配,并将其返回调用者。
Recordset在脚本的最顶部被打开,因为它对于所选择的显示类型是独立的。
recordset处理从BuildSQL()函数调用生成的SQL声明,使用一个到Access97的无DSN链接。
〈BODY〉标记中包含的代码仅仅是两个"if….then"声明,确定用户所要求的显示方法。
if声明分流到生成正确返回类型的函数,该返回类型是基于用户的"ReturnAS"选择。
接着清除链接和记录集对象。
注意:
这个样本没有涉及到用户下载web服务器上创建的文件之后,对这些文件的维护问题。
我建议这种维护要基于一段时间,时间到期后就删除这些文件。
我不主张把移走这些文件的负担转嫁到客户身上(通过页面上的链接),因为他们很容易忘记这些事情。
结论
本文演示了将数据输出到一个Excel可读格式的三种方法。
我相信根据用户的不同需要,这三种方法都有其可用之地。
如果你愿意快速但不漂亮地输出到Excel,就用ContentType好了。
如果你想要一个格式有限但能够装载到许多不同应用程序中的文件,那么CSV格式适合你。
如果你更喜欢包含完整格式、图标或特殊Excel功能,那么创建一个完全的Excel电子表格是适合的途径。
但愿这些方法能帮助其他程序员满足客户的要求或者至少帮助你选择正确的途径。
---------------------------------------------------------------------------------
asp生成excel文件的问题!
!
-----------------------------------------------------------------------------------------
如何实现如下功能:
把用户从数据库中查询的结果生成excel格式的文件供用户下载!
!
有什么好的方案吗?
谢谢解答,正确答案的全分!
---------------------------------------------------------------
这里有一个例子
---------------------------------------------------------------
将SQLServer里的数据转换成EXCEL文件:
请参考:
---------------------------------------------------------------
<%@LANGUAGE="VBSCRIPT"%>
<%optionexplicit%>
生成EXCEL文件act=make">生成在线人口的EXCEL
<%
ifRequest("act")=""then
Response.Write"生成EXCEL文件"
else
dimconn,strconn
strconn="driver={SQLServer};server=wen;uid=sa;pwd=;database=DB_Test"
setconn=server.CreateObject("adodb.connection")
conn.Openstrconn
dimrs,sql,filename,fs,myfile,x
Setfs=server.CreateObject("scripting.filesystemobject")
'--假设你想让生成的EXCEL文件做如下的存放
filename=Server.MapPath("online.xls")
'--如果原来的EXCEL文件存在的话删除它
iffs.FileExists(filename)then
fs.DeleteFile(filename)
endif
'--创建EXCEL文件
setmyfile=fs.CreateTextFile(filename,true)
Setrs=Server.CreateObject("ADODB.Recordset")
'--从数据库中把你想放到EXCEL中的数据查出来
sql="select*fromTb_Execlorderbyiddesc"
rs.Opensql,conn
ifrs.EOFandrs.BOFthen
else
dimstrLine,responsestr
strLine=""
Foreachxinrs.fields
strLine=strLine&x.name&chr(9)
Next
'--将表的列名先写入EXCEL
myfile.writelinestrLine
DowhileNotrs.EOF
strLine=""
foreachxinrs.Fields
strLine=strLine&x.value&chr(9)
next
'--将表的数据写入EXCEL
myfile.writelinestrLine
rs.MoveNext
loop
endif
rs.Close
setrs=nothing
--------------------------------------------------------------------------
Asp生成Excel文件
作者:
未知文章来源:
本站原创点击数:
46更新时间:
2005-6-3
代码如下:
生成EXCEL文件act=make">在线生成EXCEL
<%
ifRequest("act")=""then
Response.Write"生成EXCEL文件"
else
dimconn