ASP+模板生成Word、Excel、html的代码第1/2页
程序员文章站
2022-03-26 08:16:09
大多数都是采用excel.application()组件来生成发现容易出错,而且对于大多数和我一样的菜鸟来说,比较麻烦,考虑到前些天用asp+模板+adodb.stream...
大多数都是采用excel.application()组件来生成
发现容易出错,而且对于大多数和我一样的菜鸟来说,比较麻烦,考虑到前些天用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:zhaojiangang@gmail.com
'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)
%>
发现容易出错,而且对于大多数和我一样的菜鸟来说,比较麻烦,考虑到前些天用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:zhaojiangang@gmail.com
'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)
%>
1
上一篇: Hello,Redis
下一篇: Mybatis返回结果封装map过程解析