ASP生成指定格式的EXCEl文件

转载 2011年03月25日 10:33:00

<%
Set xlApplication = Server.CreateObject("Excel.Application") '调用excel对象
xlApplication.Visible = False '无需打开excel
xlApplication.SheetsInNewWorkbook=1 '指定excel中表的数量
xlApplication.Workbooks.Add '添加工作簿
Set xlWorksheet = xlApplication.Worksheets(1) '生成第1个工作表的子对象
xlWorksheet.name="统计" '指定工作表名称
'指定列的宽度以及对齐方式
xlApplication.ActiveSheet.Columns(1).ColumnWidth=5
xlApplication.ActiveSheet.Columns(1).HorizontalAlignment=3
xlApplication.ActiveSheet.Columns(2).ColumnWidth=40
xlApplication.ActiveSheet.Columns(2).HorizontalAlignment=1
xlApplication.ActiveSheet.Columns(3).ColumnWidth=5
xlApplication.ActiveSheet.Columns(3).HorizontalAlignment=3
xlApplication.ActiveSheet.Columns(4).ColumnWidth=15
xlApplication.ActiveSheet.Columns(4).HorizontalAlignment=1
xlApplication.ActiveSheet.Columns(5).ColumnWidth=12
xlApplication.ActiveSheet.Columns(5).HorizontalAlignment=1
xlApplication.ActiveSheet.Columns(6).ColumnWidth=12
xlApplication.ActiveSheet.Columns(6).HorizontalAlignment=3
'xlApplication.ActiveSheet.Rows(i).RowHeight = 30'行的高度
'指定列的高度以及特定列
xlWorksheet.Range(xlWorksheet.Cells(1,1), xlWorksheet.Cells(1,6)).MergeCells =True '合并列
xlWorksheet.Range("A1").value="2005年统计"
xlWorksheet.Range("A1").font.Size=14'字体大小
xlWorksheet.Range("A1").font.bold=true'粗体
xlWorksheet.Range("A1").HorizontalAlignment=3'水平对齐
xlWorksheet.Range("A1").VerticalAlignment=3'垂直对齐

xlWorksheet.Cells(2,1).Value = "序号"
xlWorksheet.Cells(2,2).Value = "标题"
xlWorksheet.Cells(2,3).Value = "图"
xlWorksheet.Cells(2,4).Value = "部门"
xlWorksheet.Cells(2,5).Value = "作者"
xlWorksheet.Cells(2,6).Value = "时间"

xlWorksheet.Range("A2:F2").Borders.LineStyle=1

'--------------------------------------------------自己可做循环i=i+1(数据库数据)
'xlWorksheet.Cells(2+i,1).Value = i
'xlWorksheet.Cells(2+i,2).Value = topic
'xlWorksheet.Cells(2+i,3).Value = img_str
'xlWorksheet.Cells(2+i,4).Value = nfrom
'xlWorksheet.Cells(2+i,5).Value = writer
'xlWorksheet.Cells(2+i,6).Value = ntime
'--------------------------------------------------
Set fs = CreateObject("Scripting.FileSystemObject")
tfile=Server.MapPath("test.xls")
if fs.FileExists(tfile) then
Set f = fs.GetFile(tfile)
f.delete true
Set f = nothing
end if
Set fs = nothing
xlWorksheet.SaveAs tfile '保存文件
xlApplication.Quit '释放对象
Set xlWorksheet = Nothing
Set xlApplication = Nothing
%>
<p align="center"><a href="downfile.asp?fileSpec=<%=tfile%>">下载</a></p>

downfile.asp
<%
Function downLoadFile(FileSpec)
on error resume next
 Const ForReading=1
 Const TristateTrue=-1
 Const FILE_TRANSFER_SIZE=1024 '16384
 Dim objFileSystem, objFile, objStream
 Dim char
 Dim sent
 Set objFileSystem = CreateObject("Scripting.FileSystemObject")
 If objFileSystem.FileExists(fileSpec)=false Then
 response.write("<Script>alert(""请求文件不存在!"");history.back();</script>")
 Exit Function
 End If
 FileName = objFileSystem.GetFileName(FileSpec)
 send=0
 TransferFile = True
 Set objFileSystem = Server.CreateObject("Scripting.FileSystemObject")
 Set objFile = objFileSystem.GetFile(FileSpec)
 Set objStream = objFile.OpenAsTextStream(ForReading, TristateTrue)
 Response.AddHeader "content-type", "application/octet-stream"
 Response.AddHeader "Content-Disposition","attachment;filename=" & filename
 
 Response.AddHeader "content-length", objFile.Size
 Do While Not objStream.AtEndOfStream
 char = objStream.Read(1)
 Response.BinaryWrite(char)
 sent = sent + 1
 If (sent MOD FILE_TRANSFER_SIZE) = 0 Then
 Response.Flush
 If Not Response.IsClientConnected Then
 TransferFile = False
 Exit Do
 End If
 End If
 Loop
 Response.Flush
 If Not Response.IsClientConnected Then TransferFile = False
 objStream.Close
 Set objStream = Nothing
 Set objFileSystem = Nothing
End Function
fileSpec =Lcase(Cstr(Trim(Request("fileSpec"))))
 downLoadFile(fileSpec)
%>

环境配置    
  服务器端的环境配置从参考资料上看,微软系列的配置应该都行,即:    
  1.Win9x+PWS+Office    
  2.Win2000   Professional+PWS+Office    
  3.Win2000   Server+IIS+Office    
  目前笔者测试成功的环境是后二者。Office的版本没有特殊要求,考虑到客户机配置的不确定性和下兼容特性,建议服务器端Office版本不要太高,以防止客户机下载后无法正确显示。    
  服务器端环境配置还有两个偶然的发现是:    
  1.   笔者开发机器上原来装有金山的WPS2002,结果Excel对象创建始终出现问题,卸载WPS2002后,错误消失。    
  2.   笔者开发ASP代码喜欢用FrontPage,结果发现如果FrontPage打开(服务器端),对象创建出现不稳定现象,时而成功时而不成功。扩展考察后发现,Office系列的软件如果在服务器端运行,则Excel对象的创建很难成功。    
  服务器端还必须要设置的一点是COM组件的操作权限。在命令行键入“DCOMCNFG”,则进入COM组件配置界面,选择Microsoft   Excel后点击属性按钮,将三个单选项一律选择自定义,编辑中将Everyone加入所有权限。保存完毕后重新启动服务器。    
  客户端的环境配置没发现什么特别讲究的地方,只要装有Office和IE即可,版本通用的好象都可以。    
   
  二、   ASP对Excel的基本操作    
  1、   建立Excel对象    
  set   objExcelApp   =   CreateObject("Excel.Application")    
  objExcelApp.DisplayAlerts   =   false   不显示警告    
  objExcelApp.Application.Visible   =   false   不显示界面    
  2、   新建Excel文件    
  objExcelApp.WorkBooks.add    
  set   objExcelBook   =   objExcelApp.ActiveWorkBook    
  set   objExcelSheets   =   objExcelBook.Worksheets    
  set   objExcelSheet   =   objExcelBook.Sheets(1)    
  3、   读取已有Excel文件    
  strAddr   =   Server.MapPath(".")    
  objExcelApp.WorkBooks.Open(strAddr   &   "TempletTable.xls")    
  set   objExcelBook   =   objExcelApp.ActiveWorkBook    
  set   objExcelSheets   =   objExcelBook.Worksheets    
  set   objExcelSheet   =   objExcelBook.Sheets(1)    
  4、   另存Excel文件    
  objExcelBook.SaveAs   strAddr   &   "TempTable.xls"    
  5、   保存Excel文件    
  objExcelBook.Save   (笔者测试时保存成功,页面报错。)    
  6、   退出Excel操作    
  objExcelApp.Quit   一定要退出    
  set   objExcelApp   =   Nothing    
   
  三、   ASP操作Excel生成数据表    
  1、   在一个范围内插入数据    
  objExcelSheet.Range("B3:k3").Value   =   Array("67",   "87",   "5",   "9",   "7",   "45",   "45",   "54",   "54",   "10")    
  2、   在一个单元格内插入数据    
  objExcelSheet.Cells(3,1).Value="Internet   Explorer"    
  3、   选中一个范围    
  4、   单元格左边画粗线条    
  5、   单元格右边画粗线条    
  6、   单元格上边画粗线条    
  7、   单元格下边画粗线条    
  8、   单元格设定背景色    
  9、   合并单元格    
  10、   插入行    
  11、   插入列    
   
  四、   ASP操作Excel生成Chart图    
  1、   创建Chart图    
  objExcelApp.Charts.Add    
  2、   设定Chart图种类    
  objExcelApp.ActiveChart.ChartType   =   97    
  注:二维折线图,4;二维饼图,5;二维柱形图,51    
  3、   设定Chart图标题    
  objExcelApp.ActiveChart.HasTitle   =   True    
  objExcelApp.ActiveChart.ChartTitle.Text   =   "A   test   Chart"    
  4、   通过表格数据设定图形    
  objExcelApp.ActiveChart.SetSourceData   objExcelSheet.Range("A1:k5"),1    
  5、   直接设定图形数据(推荐)    
  objExcelApp.ActiveChart.SeriesCollection.NewSeries    
  objExcelApp.ActiveChart.SeriesCollection(1).Name   =   "=""333"""    
  objExcelApp.ActiveChart.SeriesCollection(1).Values   =   "={1,4,5,6,2}"    
  6、   绑定Chart图    
  objExcelApp.ActiveChart.Location   1    
  7、   显示数据表    
  objExcelApp.ActiveChart.HasDataTable   =   True    
  8、   显示图例    
  objExcelApp.ActiveChart.DataTable.ShowLegendKey   =   True    
   
  五、   服务器端Excel文件浏览、下载、删除方案    
  浏览的解决方法很多,“Location.href=”,“Navigate”,“Response.Redirect”都可以实现,建议用客户端的方法,原因是给服务器更多的时间生成Excel文件。    
  下载的实现要麻烦一些。用网上现成的服务器端下载组件或自己定制开发一个组件是比较好的方案。另外一种方法是在客户端操作Excel组件,由客户端操作服务器端Excel文件另存至客户端。这种方法要求客户端开放不安全ActiveX控件的操作权限,考虑到通知每个客户将服务器设置为可信站点的麻烦程度建议还是用第一个方法比较省事。    
  删除方案由三部分组成:    
  A:   同一用户生成的Excel文件用同一个文件名,文件名可用用户ID号或SessionID号等可确信不重复字符串组成。这样新文件生成时自动覆盖上一文件。    
  B:   在Global.asa文件中设置Session_onEnd事件激发时,删除这个用户的Excel暂存文件。    
  C:   在Global.asa文件中设置Application_onStart事件激发时,删除暂存目录下的所有文件。    
  注:建议目录结构   Src   代码目录   Templet   模板目录   Temp   暂存目录    
   
  六、   附录    
  出错时Excel出现的死进程出现是一件很头疼的事情。在每个文件前加上“On   Error   Resume   Next”将有助于改善这种情况,因为它会不管文件是否产生错误都坚持执行到“Application.Quit”,保证每次程序执行完不留下死进程

相关文章推荐

Asp导出数据库数据到Excel

最近做ASP,需要导出数据库数据到Excel中,结果卡住好久没有进展。 今天终于解决了,总结下过程: 1.整体代码 ...

asp设置Excel单元格类型为文本

.xlsText{mso-style-parent:style0;mso-number-format:"\@";}     /* 设置单元格类型为文本*/           respons...

Html导出Excel文件(兼容所有浏览器,支持设置文件名)

JavaScript Html导出Excel文件(兼容所有浏览器),现网络上首个JavaScript Html代码块导出Excel文件,兼容全部浏览器导出Excel文件的Demo,支持设置Excel文...

Razor和HtmlHelper的使用意义

写这篇文档的目的是为了给初学MVC的同伴们介绍在MVC的View中的两个新概念,能有利于我们更快,更好的开发项目。一个是视图引擎,一个是HtmlHlper。这两个知识都不是新的,知识概念新而已,都是在...

asp.net导出EXCEL的好方法!(好用,导出全部数据)

1.调用方法: ExportExcel("application/ms-excel", "EXCEL名称.xls", GridView1, this.Page); 2.定义方法: ...

python脚本从excel表到处数据,生成指定格式的文件

python脚本从excel表到处数据,生成指定格式的文件

python处理文本文件,生成指定格式的文件

import os import sys import string #以指定模式打开指定文件,获取文件句柄 def getFileIns(filePath,model): print("打...

java读取Excel指定格式的数据

Excel Version 2003 JDK 1.6 帮朋友做的,弄完后留个印象 代码:有点乱,只为实现功能,没有过多修改调试 import java.io.File;...

Java遍历文件夹&读取指定格式的文件zUI金

最近想自己写个Android音乐播放器练手,首先遇到的问题就是如何将手机里的歌曲文件扫描出来。百般思虑决定先用PC练练手。 其实网上有过用递归或者不用递归的方式。后来我有发现了大部分都是使用的递归,...

Linux下 C语言实现遍历指定目录下指定格式的文件

/* **path为指定的目录路径,遍历该目录下的文件,找出指定格式(.mp3)的文件 **并将文件名分组分别写入.txt文件,方便多进程处理 */ #define SINGLENUM 10 int...
  • yff1030
  • yff1030
  • 2012年08月12日 21:06
  • 6957
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP生成指定格式的EXCEl文件
举报原因:
原因补充:

(最多只允许输入30个字)