ASP生成指定格式的EXCEl文件

<%
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”,保证每次程序执行完不留下死进程

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值