将数据库的内容生成WORD文档
2005-09-07 12:45
435 查看
1。改头,就是象excel似的
Response.Buffer = TRUE
Response.ContentType = "application/vnd.ms-excel" '--excel
Response.ContentType = "application/msword" '--word
excel倒是没事,但word就是总出错。弱! 2。微软的RTF-DOC的例子
它的例子倒是很成功,可根据实际需要改起来,不好弄,格式不好控制。
3。调用word.application对象
在客户端用这种东西Set objWordDoc = CreateObject("Word.Document")来调用word生成,但是要用户改客户端的安全级别设置,不好!格式控制起来也麻烦。我鼓捣了老半天也搞不定。
4。利用FSO生成word文档
不敢说原创,只能说是综合大家的东西,搞成了这个东西。本文主要介绍我的这种方法。
下面主要介绍从数据库中取资料,然后利用FSO生成Word文档的例子,先给出部分代码,最后给出全部代码。
从数据库中读取数据的代码:
<%
'创建RecordSet对象
Set rs = Server.CreateObject("ADODB.Recordset")
'SQL语句根据实际情况调整
sql="select * from People where PeopleId=" & PeopleId
'Open RecordSet,省略了创建及打开connection对象的代码,请自行添加
rs.open sql,conn,3,3
if rs.eof and rs.bof then
'无记录
else
'做点事情,主要是从数据库中获取一些资源
'赋给变量,再用FSO生成
end if
rs.Close
Set rs=Nothing
conn.Close
Set conn = Nothing
%>
<%
'创建RecordSet对象
Set rs = Server.CreateObject("ADODB.Recordset")
'SQL语句根据实际情况调整
sql="select * from People where PeopleId=" & PeopleId
'Open RecordSet,省略了创建及打开connection对象的代码,请自行添加
rs.open sql,conn,3,3
if rs.eof and rs.bof then
'无记录
else
'做点事情,主要是从数据库中获取一些资源
'赋给变量,再用FSO生成
end if
rs.Close
Set rs=Nothing
conn.Close
Set conn = Nothing
%>
用FSO创建word的代码:
<%
'下面生成文件的代码。
Dim fso, MyFile
'创建FSO对象,有些服务器有可能不支持这个对象,那就没戏了
Set fso = CreateObject("Scripting.FileSystemObject")
'文件名
sFileName = "temp.doc"
'生成新文件文件放在当前目录的word/下,当前测试时必须有这个目录
Set MyFile = fso.CreateTextFile(Server.MapPath(".")& "/word/"&sFileName, True)
myString="这里是你预先排好的word文档,要填的地方都空好了,怎么弄底下告诉!"
'将MyString作为新文件的内容写入文件
MyFile.WriteLine(myString)
MyFile.Close '关闭文件
%>
文件已经生成了。注意在iis里把word目录设置为“写入”。
以下将word文档以数据流写出,不让IE自动打开,防止出错误提示。
让word文档以附件的形式打开的代码:
Dim strFilePathConst
adTypeBinary = 1
strFilePath = "word/temp.doc"
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile Server.MapPath(strFilePath) 'change the path if necessary
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; filename=化工学院教职工数据采集表--"&rs("name")&".doc"
'如果文件名固定,那就直接filename=文件名.doc,这个名字就是用户选“保存”时,出现的名字
Response.BinaryWrite objStream.Read
Response.Flush
objStream.Close
Set objStream = Nothing '写完,释放对象
[Ctrl+A 全部选择 然后拷贝]
发现把attachment去掉,就会用ie直接打开了。不让它直接打开!
以下为从库中取资料并生成Wrod代码:
<%
Sub CreateWord(filename,content)
Dim fso, MyFile
'创建FSO对象,有些服务器有可能不支持这个对象,那就没戏了
Set fso = CreateObject("Scripting.FileSystemObject")
'生成新文件文件放在当前目录的word/下,当前测试时必须有这个目录
Set MyFile = fso.CreateTextFile(filename, True)
MyFile.WriteLine(content)
MyFile.Close '关闭文件
Set fso = Nothing
End Sub
'假设数据库中有如下字段:
'FileName:生成的word文件名
'content:个人资料
Set conn = CreateObject("Adodb.Connection")
strConn = "Driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.Mappath("你的Access库文件名")
conn.Open strConn
'创建RecordSet对象
Set rs = Server.CreateObject("ADODB.Recordset")
'SQL语句根据实际情况调整
sql="select * from [TableName]"
'Open RecordSet,省略了创建及打开connection对象的代码,请自行添加
rs.open sql,conn,3,3
if rs.eof and rs.bof then
Response.Write("对不起数据库中还没有任何记录!")
Response.End
else
sFilePath = "Word/"
Do While Not rs.Eof
sFileName = Server.Mappath(sFilePath & rs("filename"))
sWordContent = rs("content")
Call CreateWord(sFileName,sWordContent)
rs.MoveNext
Loop
end if
rs.Close
Set rs=Nothing
conn.Close
Set conn = Nothing
%>
[Ctrl+A 全部选择 然后拷贝]
注:myString="" 里面到底是什么?
用word做一个你要的格式的文档,都排好了,
把要填的地方做好标记,比如写几个字什么的。
然后“另存为”web页面。本文所说的是文档里没有图片的情况,有的话我也不会。
到你的硬盘里找到这个web页面,打开,查看源文件,ctrl+a,ctrl+c,
在word里,ctrl+N,ctrl+v,ctrl+F,点“替换”标签,
第一步:查找内容填双引号",替换为填两个双引号"",全部替换即可。
第二步:点“高级”,查找内容里填“特殊字符”的“段落标记”,替换为填“特殊字符”的“不间断空格”,全部替换即可。
然后ctrl+a,ctrl+c,把东西paste在myString=""的两个引号之间。
==========================================
这时.asp文件已经可以执行,不过生成的是空word文档,啥也没填,没用。
在myString后面的引号里,找你那些标记,比如姓名一栏你填的是“西瓜”,
那么现在找到“西瓜”两个字,删除,打"&rs("name")&",
包括前后两个引号。以此类推,把所有的地方都用库中的纪录搞定。
========================================
哦,现在就行了。基本满足要求了。
注:几个小问题
1。有时保存你的word文档到web页面时,会生成”你的文件名.files"的文件夹。
那你用这个.asp文件动态生成word文档时,会提示“XXXX丢失”,不爽!
解决办法:在你保存的web页面,查看源文件,查找“你的文件名.files“,
相关的地方都删除掉。一般会有<link...>还有style里的。看着删吧。
2。这个.asp文件执行是会出现下载提示框,如果选“打开”的话,
word就会打开生成的这个文档,我发现有时是以“web视图”打开的,
有时是“页面视图”打开的。很是奇怪,仔细对比了一下,发现:
只要在你的myString里找<w:WordDocument>,在后面加上<w:View>Print</w:View>,那么就会以“页面视图”打开了。好了!
Response.Buffer = TRUE
Response.ContentType = "application/vnd.ms-excel" '--excel
Response.ContentType = "application/msword" '--word
excel倒是没事,但word就是总出错。弱! 2。微软的RTF-DOC的例子
它的例子倒是很成功,可根据实际需要改起来,不好弄,格式不好控制。
3。调用word.application对象
在客户端用这种东西Set objWordDoc = CreateObject("Word.Document")来调用word生成,但是要用户改客户端的安全级别设置,不好!格式控制起来也麻烦。我鼓捣了老半天也搞不定。
4。利用FSO生成word文档
不敢说原创,只能说是综合大家的东西,搞成了这个东西。本文主要介绍我的这种方法。
下面主要介绍从数据库中取资料,然后利用FSO生成Word文档的例子,先给出部分代码,最后给出全部代码。
从数据库中读取数据的代码:
<%
'创建RecordSet对象
Set rs = Server.CreateObject("ADODB.Recordset")
'SQL语句根据实际情况调整
sql="select * from People where PeopleId=" & PeopleId
'Open RecordSet,省略了创建及打开connection对象的代码,请自行添加
rs.open sql,conn,3,3
if rs.eof and rs.bof then
'无记录
else
'做点事情,主要是从数据库中获取一些资源
'赋给变量,再用FSO生成
end if
rs.Close
Set rs=Nothing
conn.Close
Set conn = Nothing
%>
<%
'创建RecordSet对象
Set rs = Server.CreateObject("ADODB.Recordset")
'SQL语句根据实际情况调整
sql="select * from People where PeopleId=" & PeopleId
'Open RecordSet,省略了创建及打开connection对象的代码,请自行添加
rs.open sql,conn,3,3
if rs.eof and rs.bof then
'无记录
else
'做点事情,主要是从数据库中获取一些资源
'赋给变量,再用FSO生成
end if
rs.Close
Set rs=Nothing
conn.Close
Set conn = Nothing
%>
用FSO创建word的代码:
<%
'下面生成文件的代码。
Dim fso, MyFile
'创建FSO对象,有些服务器有可能不支持这个对象,那就没戏了
Set fso = CreateObject("Scripting.FileSystemObject")
'文件名
sFileName = "temp.doc"
'生成新文件文件放在当前目录的word/下,当前测试时必须有这个目录
Set MyFile = fso.CreateTextFile(Server.MapPath(".")& "/word/"&sFileName, True)
myString="这里是你预先排好的word文档,要填的地方都空好了,怎么弄底下告诉!"
'将MyString作为新文件的内容写入文件
MyFile.WriteLine(myString)
MyFile.Close '关闭文件
%>
文件已经生成了。注意在iis里把word目录设置为“写入”。
以下将word文档以数据流写出,不让IE自动打开,防止出错误提示。
让word文档以附件的形式打开的代码:
Dim strFilePathConst
adTypeBinary = 1
strFilePath = "word/temp.doc"
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile Server.MapPath(strFilePath) 'change the path if necessary
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; filename=化工学院教职工数据采集表--"&rs("name")&".doc"
'如果文件名固定,那就直接filename=文件名.doc,这个名字就是用户选“保存”时,出现的名字
Response.BinaryWrite objStream.Read
Response.Flush
objStream.Close
Set objStream = Nothing '写完,释放对象
[Ctrl+A 全部选择 然后拷贝]
发现把attachment去掉,就会用ie直接打开了。不让它直接打开!
以下为从库中取资料并生成Wrod代码:
<%
Sub CreateWord(filename,content)
Dim fso, MyFile
'创建FSO对象,有些服务器有可能不支持这个对象,那就没戏了
Set fso = CreateObject("Scripting.FileSystemObject")
'生成新文件文件放在当前目录的word/下,当前测试时必须有这个目录
Set MyFile = fso.CreateTextFile(filename, True)
MyFile.WriteLine(content)
MyFile.Close '关闭文件
Set fso = Nothing
End Sub
'假设数据库中有如下字段:
'FileName:生成的word文件名
'content:个人资料
Set conn = CreateObject("Adodb.Connection")
strConn = "Driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.Mappath("你的Access库文件名")
conn.Open strConn
'创建RecordSet对象
Set rs = Server.CreateObject("ADODB.Recordset")
'SQL语句根据实际情况调整
sql="select * from [TableName]"
'Open RecordSet,省略了创建及打开connection对象的代码,请自行添加
rs.open sql,conn,3,3
if rs.eof and rs.bof then
Response.Write("对不起数据库中还没有任何记录!")
Response.End
else
sFilePath = "Word/"
Do While Not rs.Eof
sFileName = Server.Mappath(sFilePath & rs("filename"))
sWordContent = rs("content")
Call CreateWord(sFileName,sWordContent)
rs.MoveNext
Loop
end if
rs.Close
Set rs=Nothing
conn.Close
Set conn = Nothing
%>
[Ctrl+A 全部选择 然后拷贝]
注:myString="" 里面到底是什么?
用word做一个你要的格式的文档,都排好了,
把要填的地方做好标记,比如写几个字什么的。
然后“另存为”web页面。本文所说的是文档里没有图片的情况,有的话我也不会。
到你的硬盘里找到这个web页面,打开,查看源文件,ctrl+a,ctrl+c,
在word里,ctrl+N,ctrl+v,ctrl+F,点“替换”标签,
第一步:查找内容填双引号",替换为填两个双引号"",全部替换即可。
第二步:点“高级”,查找内容里填“特殊字符”的“段落标记”,替换为填“特殊字符”的“不间断空格”,全部替换即可。
然后ctrl+a,ctrl+c,把东西paste在myString=""的两个引号之间。
==========================================
这时.asp文件已经可以执行,不过生成的是空word文档,啥也没填,没用。
在myString后面的引号里,找你那些标记,比如姓名一栏你填的是“西瓜”,
那么现在找到“西瓜”两个字,删除,打"&rs("name")&",
包括前后两个引号。以此类推,把所有的地方都用库中的纪录搞定。
========================================
哦,现在就行了。基本满足要求了。
注:几个小问题
1。有时保存你的word文档到web页面时,会生成”你的文件名.files"的文件夹。
那你用这个.asp文件动态生成word文档时,会提示“XXXX丢失”,不爽!
解决办法:在你保存的web页面,查看源文件,查找“你的文件名.files“,
相关的地方都删除掉。一般会有<link...>还有style里的。看着删吧。
2。这个.asp文件执行是会出现下载提示框,如果选“打开”的话,
word就会打开生成的这个文档,我发现有时是以“web视图”打开的,
有时是“页面视图”打开的。很是奇怪,仔细对比了一下,发现:
只要在你的myString里找<w:WordDocument>,在后面加上<w:View>Print</w:View>,那么就会以“页面视图”打开了。好了!
附:使IE下载WORD文档 文件名:Download.asp <% Dim Stream Dim Contents Dim FileName Dim FileExt Const adTypeBinary = 1 FileName = Request.QueryString("FileName") if FileName = "" Then Response.Write "无效文件名." Response.End End if ’ 下面是不希望下载的文件 FileExt = Mid(FileName, InStrRev(FileName, ".") + 1) Select Case UCase(FileExt) Case "ASP", "ASA", "ASPX", "ASAX", "MDB" Response.Write "受保护文件,不能下载." Response.End End Select ’ 下载这个文件 Response.Clear Response.ContentType = "application/octet-stream" Response.AddHeader "content-disposition", "attachment; filename=" & FileName Set Stream = server.CreateObject("ADODB.Stream") Stream.Type = adTypeBinary Stream.Open Stream.LoadFromFile Server.MapPath(FileName) While Not Stream.EOS Response.BinaryWrite Stream.Read(1024 * 64) Wend Stream.Close Set Stream = Nothing Response.Flush Response.End %> 使用:Download.asp?FileName=/Files/MY.doc 把你的DOC文件放到根目录Files下,你也可以放到其它地方了。 如: <A HREF="Download.asp?FileName=/Files/MY.doc">点击下载WORD文档</A> |
相关文章推荐
- ASP 把数据库内容生成Word文档保存到目录下
- ASP 把数据库内容生成Word文档保存到目录下
- 通过C#从数据库中读取内容生成WORD文档
- JAVA根据数据库表生成word表格文档
- 实现Freemarker生成word文档,内容可二次写入
- 根据数据库生成word帮助文档
- 如何把数据库的内容写入到Word文档中?
- Word插件----从数据库中提取表结构,生成字典文档
- 如何把数据库的内容写入到Word文档中
- java生成word,html文件并将内容保存至数据库 (http://blog.163.com/whs3727@126/blog/static/729915772007325112014115/)
- 从数据库导出数据生成word或excel文档
- 使用 powerdesigner 将数据库表结构逆向工程生成对应的word文档
- 数据库文档生成工具——word2chm,SqlSpec
- 根据Excel的内容和word模板生成对应的word文档
- php将数据库中所有内容生成静态html文档的代码
- php将数据库中所有内容生成静态html文档的代码
- 我鼓捣的数据库数据生成word文档的方法!
- php中如何把html中的内容生成到word文档
- 从数据库中取出数据,使用freemarker生成word文档
- 关于数据库管理工具的使用----把数据库中的表等生成word文档