zoukankan      html  css  js  c++  java
  • 数据库数据生成word文档的方法

     来自:萧萧小雨
    毕业设计需要:从库里取纪录生成word文档。
    我找了半天,主要有这么几种方法:
    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。就是本文介绍的方法,但我只找到了思想,还是介绍生成excel的思想,例子的没有。
    郁闷至极,试验多次,终于有了本文的方法和例子。不敢说原创,只能说是综合大家的东西,搞成了这个东西。
    废话少说,看例子吧。

    我这例子是生成教师个人资料的word文档。
    =============================
    '这里写你的数据库连接
    Response.Buffer = True '这个好像得留着
    PeopleId=request("PeopleId")
    Set rs = Server.CreateObject("ADODB.Recordset")
    sql="select * from People where PeopleId=" & PeopleId
    rs.open sql,conn,3,3
    if rs.eof and rs.bof then
    做点事情
    end if
    ===========================================
    上面是把教师的资料取出来,换成你的东西。
    下面生成文件。
    ===============================
    Dim fso, MyFile
    Set fso = CreateObject("Scripting.FileSystemObject") '用到fso
    sFileName = "temp.doc"
    Set MyFile = fso.CreateTextFile(Server.MapPath(".") & "word""&sFileName, True) '文件放在当前目录的word/下
    myString="这里是你预先排好的word文档,要填的地方都空好了,怎么弄底下告诉!"
    MyFile.WriteLine(myString)MyFile.Close '关闭文件
    ===================================
    文件已经生成了。注意在iis里把word目录设置为“写入”。
    以下将word文档以数据流写出,不让IE自动打开,防止出错误提示。
    ==================================
    Dim strFilePath
    Const 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.ReadResponse.Flush
    objStream.Close
    Set objStream = Nothing '写完,释放对象
    ===============================
    上面是让word文档以附件的形式打开,当然没错误了。
    发现把attachment去掉,就会用ie直接打开了。不让它直接打!
    =======================
    rs.close
    set rs=nothing
    conn.closeset conn=nothing
    ====================
    关闭释放数据库连接。
    =================================
    注: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“,
    相关的地方都删除掉。一般会有还有style里的。看着删吧。

    2。这个.asp文件执行是会出现下载提示框,如果选“打开”的话,
    word就会打开生成的这个文档,我发现有时是以“web视图”打开的,
    有时是“页面视图”打开的。很是奇怪,仔细对比了一下,发现:
    只要在你的myString里找,在后面加上Print,那么就会以“页面视图”打开了。好!

    原始:http://www.hanxun.cn/document/content.php?id=113

  • 相关阅读:
    MySQL Explain优化
    mysql联合索引
    MySQL索引类型
    php常用的排序算法与二分法查找
    mysql 主从复制(mysql双机热备的实现)
    mysql 主从复制 (2)
    Linux 查看进程之PS命令
    PHP isset 和 array_key_exists 对比
    Linux md5sum 的用法
    Linux Sphinx 安装与使用
  • 原文地址:https://www.cnblogs.com/y0umer/p/3839267.html
Copyright © 2011-2022 走看看