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文件的代码(自己试验成功并且一直在使用的哟)

dim  conn,strconn  strconn="driver={SQL Server};server=wen;uid=sa;pwd=;database=DB_Test"  set conn=s...
  • ailincn
  • ailincn
  • 2007年03月14日 22:39
  • 4118

Asp导出数据库数据到Excel

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

asp生成excel数据报表

1. 前言 报表打印通常是管理信息系统中的一个重要模块,而Excel凭借它功能强大...
  • JOHNCOOLS
  • JOHNCOOLS
  • 2006年06月30日 10:56
  • 2018

ASP生成静态Html文件技术

现在网站网页生成静态Html文件有许多好处,比如生成html网页有利于被搜索引擎收录,不仅被收录的快还收录的全.前台脱离了数据访问,减轻对数据库访问的压力,加快网页打开速度.  像www.aspid...
  • chinajobs
  • chinajobs
  • 2016年05月13日 10:23
  • 700

利用asp将数据写入到新的excel文件中

很多人都在坛子里问这个问题,因为代码比较长,很多人给出的答案都不是很完整,导致一些刚接触的人走了不少的弯路,这里总结一下生成的过程以及原理,希望能给大家一个参考和帮助1.首先生成一个excel文件,需...
  • ace_2006
  • ace_2006
  • 2006年11月08日 17:41
  • 803

[收藏]ASP输出Excel文本格式确定 | asp设置Excel单元格类型为文本

              .xlsText{mso-style-parent:style0;mso-number-format:"/@";}     /* 设置单元格类型为文本*/ ...
  • fly29
  • fly29
  • 2010年12月01日 13:28
  • 2706

POI编程——java程序中输出指定格式的Excel表格

一、基础知识: 1. 创建工作簿Workbook   Workbook wb = new HSSFWorkbook(); 2.创建工作表Sheet   Workbook wb = ne...
  • u010964820
  • u010964820
  • 2013年06月27日 16:23
  • 1475

使用excel日期函数生成指定格式日期

由于需要记录每天的工作与学习状态,所以需要生成每月的日期及星期,格式如下 【1.1 周三】上网查找资料 【1.2 周四】开始编写文档 如何快速生成呢? 打开Excel,在任意sheet...
  • zhuce0001
  • zhuce0001
  • 2014年03月06日 20:38
  • 1284

ASP程序快速生成Excel文件

ASP程序快速生成Excel文件 在一个web项目中,要求将数据生成Excel文件保存到本地,最早使用的方法是直接使用Microsoft的Office Web组件,但是总体感觉是慢(微软的通病)。然后...
  • tianxiaode
  • tianxiaode
  • 2006年01月07日 16:07
  • 3042

(解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致

1、打开注册表编辑器 方法:开始 -> 运行 -> 输入regedit -> 确定 2、找到注册表子项 HKEY_CURRENT_USER\Software\Microsoft\Office...
  • ldl22847
  • ldl22847
  • 2013年07月04日 08:55
  • 2407
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP生成指定格式的EXCEl文件
举报原因:
原因补充:

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