ASP+模板生成Word、Excel、html的代码

  大多数都是采用Excel.Application(http://www.blueidea.com/tech/program/2006/3547.asp)组件来生成

  发现容易出错,而且对于大多数和我一样的菜鸟来说,比较麻烦,考虑到前些天用ASP+模板+adodb.stream生成静态页面的办法,经过多次尝试,终于掌握了一种用ASP+模板生成Excel和word的新的办法,先分享如下:

  用模板生成Excel、Word最大优点:

  Word、Excel文档样式易于控制和调整,以往用Excel.Application来生成Excel、Word,需要写很多代码来控制排版的样式,用模版几乎不受任何限制,只需要打开word或Excel,编辑文档,选择"文件->另存为web页",即可方便的做好模板 ,用office生成的模板要比直接在DW中做好模板更加符合office偏好,生成后文件样式可与原word、Excel格式99%一样,因此建议大家用office(office97~office2003)直接来生成模板框架。

  主要的代码

  function.asp

  

复制代码 代码如下:

  <%

  '欢迎与我交流和学习

  '作者:幸福的子弹

  'BLOG:http://mysheji.com/blog

  'E-mail:[email protected]

  'QQ:37294812

  '-----------------------------------------------------------------------------

  '开启容错机制

  on error resume next

  '功能,检测服务器是否支持指定组件

  Function object_install(strclassstring)

  on error resume next

  object_install=false

  dim xtestobj

  set xtestobj=server.createobject(strclassstring)

  if -2147221005 <> Err then object_install=true

  set xtestobj=nothing

  end function

  if object_install("Scripting.FileSystemobject")=false then

  Response.Write "<div style='font-size:12px;color:#333;height:20px;line-height:20px;border:1px solid #DDCF8F;padding:6px;background:#FFFFED;font-family:verdana'>对不起,您的空间不支持FSO组件,请与管理员联系!</div>"

  Response.End

  end if

  if object_install("adodb.stream")=false then

  Response.Write "<div style='font-size:12px;color:#333;height:20px;line-height:20px;border:1px solid #DDCF8F;padding:6px;background:#FFFFED;font-family:verdana'>对不起,您的空间不支持adodb.stream功能,请与管理员联系!</div>"

  Response.End

  end if

  '-----------------------------------------------------------------------------

  '函数名称:ReadTextFile

  '作用:利用AdoDb.Stream对象来读取文本文件

  '参数:FileUrl文件相对路径,FileCharSet:文件编码

  Function ReadFromTextFile (FileUrl,FileCharSet)'函数

  dim str

  set stm=server.CreateObject("adodb.stream")

  stm.Type=2 '指定或返回的数据类型,

  stm.mode=3 '指定打开模式,现在为可以读写模式,类似于word的只读或锁定功能

  stm.charset=FileCharSet

  stm.open

  stm.loadfromfile server.MapPath(FileUrl)

  str=stm.readtext

  ReadFromTextFile=str

  End Function

  '-----------------------------------------------------------------------------

  '函数名称:WriteToTextFile

  '作用:利用AdoDb.Stream对象来写入文本文件

  sub WriteToTextFile(FileUrl,Str,FileCharSet) '方法

  set stm=server.CreateObject("adodb.stream")

  stm.Type=2

  stm.mode=3

  stm.charset=FileCharSet

  stm.open

  stm.WriteText str

  stm.SaveToFile server.MapPath(FileUrl),2

  stm.flush

  End sub

  '-----------------------------------------------------------------------------

  '功能:自动创建文件夹

  '创建一级或多级目录,可以创建不存在的根目录

  '参数:要创建的目录名称,可以是多级

  '返回逻辑值,True成功,False失败

  '创建目录的根目录从当前目录开始

  Function CreateMultiFolder(ByVal CFolder)

  Dim objFSO,PhCreateFolder,CreateFolderArray,CreateFolder

  Dim i,ii,CreateFolderSub,PhCreateFolderSub,BlInfo

  BlInfo = False

  CreateFolder = CFolder

  On Error Resume Next

  Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

  If Err Then

  Err.Clear()

  Exit Function

  End If

  CreateFolder = Replace(CreateFolder,"","/")

  If Left(CreateFolder,1)="/" Then

  CreateFolder = Right(CreateFolder,Len(CreateFolder)-1)

  End If

  If Right(CreateFolder,1)="/" Then

  CreateFolder = Left(CreateFolder,Len(CreateFolder)-1)

  End If

  CreateFolderArray = Split(CreateFolder,"/")

  For i = 0 to UBound(CreateFolderArray)

  CreateFolderSub = ""

  For ii = 0 to i

  CreateFolderSub = CreateFolderSub & CreateFolderArray(ii) & "/"

  Next

  PhCreateFolderSub = Server.MapPath(CreateFolderSub)

  If Not objFSO.FolderExists(PhCreateFolderSub) Then

  objFSO.CreateFolder(PhCreateFolderSub)

  End If

  Next

  If Err Then

  Err.Clear()

  Else

  BlInfo = True

  End If

  CreateMultiFolder = BlInfo

  End Function

  '点击下载提示

  function downloadFile(strFile)

  strFilename = server.MapPath(strFile)

  Response.Buffer = True

  Response.Clear

  Set s = Server.CreateObject("ADODB.Stream")

  s.Open

  s.Type = 1

  on error resume next

  Set fso = Server.CreateObject("Scripting.FileSystemObject")

  if not fso.FileExists(strFilename) then

  Response.Write("<h1>Error:</h1>" & strFilename & " does not exist<p>")

  Response.End

  end if

  Set f = fso.GetFile(strFilename)

  intFilelength = f.size

  s.LoadFromFile(strFilename)

  if err then

  Response.Write("<h1>Error: </h1>" & err.Description & "<p>")

  Response.End

  end if

  Response.AddHeader "Content-Disposition", "attachment; filename=" & f.name

  Response.AddHeader "Content-Length", intFilelength

  Response.CharSet = "UTF-8"

  Response.ContentType = "application/octet-stream"

  Response.BinaryWrite s.Read

  Response.Flush

  s.Close

  Set s = Nothing

  End Function

  '-----------------------------------------------------------------------------

  If Err Then

  err.Clear

  Set conn = Nothing

  Response.Write "<div style='font-size:12px;color:#333;height:20px;line-height:20px;border:1px solid #DDCF8F;padding:6px;background:#FFFFED;font-family:verdana'>网站异常出错,请与管理员联系,谢谢!</div>"

  Response.End

  End If

  %>

  生成Word文档:

  

复制代码 代码如下:

  <%

  '创建文件

  dim templateName,templatechar,filepath,filename,fileCharset,templateContent

  templateName="template/template_word.htm"        '模板名字,支持带路径,如"/moban/moban1.htm"或"temp/moban1.htm"

  templatechar="gb2312"                      '模板文本的编码

  filepath="files/word/"                     '生成文件保存的路径,当前目录请留空,其他目录,路径必须以“/”结尾

  filename="Doc1.doc"                           '即将生成的文件名

  CreateMultiFolder(filepath)                '这一句用来判断文件夹是否存在,没有则自动创建,支持n级目录

  fileCharset="gb2312"                       '打算生成的文本编码

  '读取指定的模板内容

  templateContent=ReadFromTextFile(templateName,templatechar)

  '以下就交给你来替换模板内容了

  templateContent=replace(templateContent,"{$websiteName}","蓝色理想")

  templateContent=replace(templateContent,"{$userName}","幸福的子弹")

  templateContent=replace(templateContent,"{$now}",Now())

  '其他内容......

  '最终调用函数来生成文件

  Call WriteToTextFile(filepath&filename,templateContent,fileCharset)

  '最后关闭adodb.stream对象

  stm.flush

  stm.Close

  set stm=nothing

  downloadFile(filepath&filename)

  %>

  生成Excel文档:

  

复制代码 代码如下:

  <%

  '创建文件

  dim templateName,templatechar,filepath,filename,fileCharset,templateContent

  templateName="template/template_excel.htm"        '模板名字,支持带路径,如"/moban/moban1.htm"或"temp/moban1.htm"

  templatechar="gb2312"                      '模板文本的编码

  filepath="files/excel/"                     '生成文件保存的路径,当前目录请留空,其他目录,路径必须以“/”结尾

  filename="Book1.xls"                           '即将生成的文件名

  CreateMultiFolder(filepath)                '这一句用来判断文件夹是否存在,没有则自动创建,支持n级目录

  fileCharset="gb2312"                       '打算生成的文本编码

  '读取指定的模板内容

  templateContent=ReadFromTextFile(templateName,templatechar)

  '以下就交给你来替换模板内容了

  templateContent=replace(templateContent,"{$websiteName}","蓝色理想")

  templateContent=replace(templateContent,"{$userName}","幸福的子弹")

  templateContent=replace(templateContent,"{$now}",Now())

  '其他内容......

  '最终调用函数来生成文件

  Call WriteToTextFile(filepath&filename,templateContent,fileCharset)

  '最后关闭adodb.stream对象

  stm.flush

  stm.Close

  set stm=nothing

  downloadFile(filepath&filename)

  %>

  生成.htm静态页面

  

复制代码 代码如下:

  <%

  '创建文件

  dim templateName,templatechar,filepath,filename,fileCharset,templateContent

  templateName="template/template_html.htm"        '模板名字,支持带路径,如"/moban/moban1.htm"或"temp/moban1.htm"

  templatechar="gb2312"                      '模板文本的编码

  filepath="files/html/"                     '生成文件保存的路径,当前目录请留空,其他目录,路径必须以“/”结尾

  filename="Untitled-1.htm"                           '即将生成的文件名

  CreateMultiFolder(filepath)                '这一句用来判断文件夹是否存在,没有则自动创建,支持n级目录

  fileCharset="gb2312"                       '打算生成的文本编码

  '读取指定的模板内容

  templateContent=ReadFromTextFile(templateName,templatechar)

  '以下就交给你来替换模板内容了

  templateContent=replace(templateContent,"{$websiteName}","蓝色理想")

  templateContent=replace(templateContent,"{$userName}","幸福的子弹")

  templateContent=replace(templateContent,"{$now}",now())

  '其他内容......

  '最终调用函数来生成文件

  Call WriteToTextFile(filepath&filename,templateContent,fileCharset)

  '最后关闭adodb.stream对象

  stm.flush

  stm.Close

  set stm=nothing

  response.Write("恭喜您,"&filename&"已经生成,<a href="""&filepath&filename&""" target=""_blank"">点击查看</a>")

  %>

  打包文件下载