欢迎光临
我们一直在努力

用ASP创建Microsoft Word 文件

建站超值云服务器,限时71元/月

随着人们对数据库及动态html (dhtml)的应用和对xml的兴趣的增加,所以在商业网站的数据中使用动态内容变得越来越普遍。这里我们就成功运用了一则最新的技巧——用asp创建 word 文件,我想您看后肯定会受到很大的启发。

原文出处:http://www.asptoday.com/articles/19990825.htm

   背景

   builddoc.asp是一个asp文件,它读入一个网页表单的输出,并创建一个microsoft word文件作为输出, 其中包含根据表单内数据改变产生的一个表格。表单内容不再局限于静态信息。也就是说, 表单中所显示的内容可能随着用户的交互作用而改变。

  

   builddoc所满足的商业需求是:根据销售人员网页列表变化的记录,建立表单信件。只有被销售人员修改过的数据才被发送到word, 在那里这些数据被格式化到表格中。

   builddoc读入表单上的所有信息,识别被改变的行,然后用被改变的行中包含的信息来创建一个 microsoft word文件。builddoc使用一个模板文件(builddoc.dot),其中包含地址头和一些预先格式化的文本。然后向文件中写入一个表格,其中的每一行都对应与网页表单中被修改过的一行。

  

   怎么做?

   开始时,将所有的网页表单域读入接收网页的隐含表单域中。在下面的源代码中,请注意在body标记中对“onload”的调用。它调用builddoc vb脚本子程序,向它传递3个参数:页面中表单的内容(所有的隐含域)、word模板文件的位置、从输入表单中收到的行数。读所有的输入表单域,然后当页面装载后调用builddoc子程序。为了简短起见,这里假定所有变量在使用之前都已被声明:

   builddoc.asp中装载输入表单域的代码如下:

〈!doctype html public "-//w3c/dtd html 3.2 final//en">

〈head>

〈title>build document〈/title>

〈meta http-equiv="refresh" content="30;url=orderform.asp">

〈/head>

〈%

dotlocation="servernamedirectory hetemplate.dot"

introwcount = request.form("rowcount") initialize a row counter

%>

〈body language="vbscript" onload="builddoc document.theform,

〈%=dotlocation%>,introwcount>

〈form name="theform">

〈%

itemcount = 0 set field counter to zero

for each item in request.form count up the form fields

itemcount = itemcount + 1 using for..next loop

%>

〈input type="hidden" name="〈%=item%>" value="〈%=request(item)%>">

〈% next %>

〈input type="hidden" name="numbrows" value="〈%=introwcount%>">

〈input type="hidden" name="fieldcount" value="〈%=itemcount%>">

〈/form>

〈/body>

〈/html>

   用下面例子中的代码来创建一个word 文件对象。请注意在internet explorer 4+中,要将浏览器的安全性设置为low或 custom,以能使应用程序运行成功。

〈%

set objworddoc = createobject("word.document")

objworddoc.application.documents.add thetemplate, false

objworddoc.application.visible=true

%>

   调整数组的维数使它与网页表单所包含的行数相同。这时,将y轴设为4个常量,这是输出文件中所需要 的栏数。x轴包含从表单中接收的行数。

〈% redim preserve thearray(4,inttablerows) %>

   现在开始检查所有的表单行。在所有输入的网页表单域中循环,收集每个表单域名及其相应的值。逐个检查以决定将其放入哪个数列元素内,然后将其放入。以下举例代码中的select case命令很重要,这决定表单域属于哪一列。为了方便,使用不确定编码的case选择。

〈%

for intcount = 0 to frmdata.fieldcount.value

strokay = "y"

strsearch = frmdata.elements(intcount).name load the field name

strvalue = frmdata.elements(intcount).value load the field value

strposition = instr(1,strsearch,"_") get pos val of "_"

intstringlen=strposition-1

if intstrlen > 0 then

strleft = left(strsearch,intstringlen)

strright = right(strsearch,(len(strsearch)-len(strleft)-1))

select case strleft

case "sku" intarrayy=0

case "description" intarrayy=1

case "price" intarrayy=2

case "quantity" intarrayy=3

end select

intarrayx = strright

if strokay 〈> "n" then

thearray(intarrayy, intarrayx) = strvalue

end if

end if

next

%>

   现在开始创建文件。对于激活的文件,用变量rngcurrent设置microsoft word文件对象range(为了防止用户打开另一个文件),通过指定表格的位置( rngcurrent)以及行、列的数目来确定其大小。

〈%

set rngcurrent = objworddoc.application.activedocument.content

set tabcurrent = objworddoc.application.activedocument.tables.add

rngcurrent,intnumrows,4)

%>

   创建了有表格的文件之后,我们开始往表格中装入数据。首先指到第一行row(tabrow=1 ), 然后进行逐行循环。在每行结尾处插入回车[chr(10)],以便产生行间空行,最后增加行计数器,用“formatcurrency” 输出美圆值以保证使用$符号、逗号、小数点的位置。通过在

“paragraphalignment=2”处设置栏数来实现美圆数量的正确调整。用vba容易一些,不象用vbscript那样难。

〈%

for j = 1 to inttablerows

objworddoc.application.activedocument.tables(1).rows(tabrow).borders.enable=false

objworddoc.application.activedocument.tables(1).rows(tabrow).cells(1).range.insertafter

thearray(1,j)

objworddoc.application.activedocument.tables(1).rows(tabrow).cells(2).range.insertafter

thearray(2,j)

objworddoc.application.activedocument.tables(1).rows(tabrow).cells(3).range.insertafter

formatcurrency(thearray(3,j))

objworddoc.application.activedocument.tables(1).rows(tabrow).cells(4).range.insertafter

thearray(4,j)

objworddoc.application.activedocument.tables(1).rows(tabrow).cells(4).range.insertafter

chr(10)

objworddoc.applicatoin.activedocument.tables(1).rows(tabrow).cells(3).

range.paragraphformat.alignment=2

tabrow = tabrow + 1

next

%>

   最后用一些收尾性的文字来结束文件,指定模板位置,然后结束子程序。

〈%

objworddoc.application.activedocument.paragraph.add.range.

insertafter("thank you for shopping at acme co., and please come again!")

objworddoc.application.activedocument.paragraph.add.range.insertafter(" ")

objworddoc.application.activedocument.paragraph.add.range.insertafter(" ")

objworddoc.application.activedocument.paragraph.add.range.insertafter("regards,")

objworddoc.application.activedocument.paragraph.add.range.insertafter(" ")

objworddoc.application.activedocument.paragraph.add.range.

insertafter("daryl b. morticum")

objworddoc.application.activedocument.paragraph.add.range.

insertafter("sales associate")

end sub

%>

   希望对你做相同的工作能有一些帮助。我可以肯定需要从网页表单中创建文件的不止我自己。 这是我的方法。如果你有更好的方法,我很愿意学习。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 用ASP创建Microsoft Word 文件
分享到: 更多 (0)