asp生成word文件

+展开
-HTML
<%@  Language=VBScript  %>  
<HTML>  
<HEAD>  
<META  NAME="GENERATOR"  Content="Microsoft  Visual  Studio  6.0">  
</HEAD>  
<BODY>  
<%  
 
sql  =  "Select  department,count(department)  From  personnel  group  by  department"  '将记录按部门分类统计  
 
Set  Cnn  =  Server.CreateObject("ADODB.Connection")    '连接数据库  
cnn.Open  "driver={sql  server};server=ywz;uid=sa;pwd=413811;database=asims"  
 
Set  Rs  =  Server.CreateObject("ADODB.Recordset")  
 
Rs.CursorType  =  3  
 
Rs.LockType  =  3  
 
Rs.Open  sql,  Cnn  
 
If  Rs.EOF  Then                    '如果没有记录就结束  
 
     Response.End  
 
End  If  
 
%>  
 
<html>  
 
<%'以下显示表格标题和输出表头%>  
 
<p  align="center"><b><font  size="4">公司员工统计表</font></b></p>  
 
<div  align="center">  
 
   <table  id="data"  border="1"  width="606"  height="53"  cellpadding="0"  cellspacing="0"  style="border-collapse:  collapse"  bordercolor="#111111">    <%'注意:此处标明表格的id为data%>  
 
       <tr>  
 
           <td  width="93"  height="24">  
 
               <p  align="center"><font  size="2">部门</font></td>  
 
           <td  width="78"  height="24">  
 
               <p  align="center"><font  size="2">合计</font></td>  
 
           <td  width="413"  height="24">  
 
               <p  align="center"><font  size="2">员工姓名</font></td>  
 
       </tr>  
 
<%  
 
hj=0    '设置变量,总人数合计初始值为0  
 
'以下While循环按部门依次完成统计和报表  
 
while  (not  rs.eof)  
 
departmenttmp=rs("department")    '设置临时变量,保存当前部门名称  
 
sqlstr="select  *  from  personnel  where  department='"&departmenttmp&"'"    '找出当前部门的所有员工  
 
Set  conn  =  Server.CreateObject("ADODB.Connection")    '再次连接数据库  
 
conn.Open  "driver={sql  server};server=ywz;uid=sa;pwd=413811;database=asims"  
 
Set  rss  =  Server.CreateObject("ADODB.Recordset")  
 
rss.CursorType  =  3  
 
rss.LockType  =  3  
 
rss.Open  sqlstr,  conn  
 
number=0    '设置变量,当前部门人数合计初始值为0  
 
'以下While循环计算出当前部门人数合计  
 
while(not  rss.eof)  
 
rss.movenext  
 
number=number+1  
 
   wend  
 
hj=hj+number    '总人数合计为各部门人数之和  
 
rss.movefirst  
 
flag=0    '设置变量,flag用来判断当前部门是否首次出现,初始值为0  
 
'以下While循环输出当前部门统计数据和员工名单  
 
   while(not  rss.eof)%>  
 
               <tr>  
 
               <%if  (flag=0)  then%>  
 
<%'如果flag为0,表示该部门是首次出现,表格此处就应该输出部门名称,部门员工合计人数%>  
 
<td  width="93"  height="24"><p  align="center"><font  size=2><%=departmenttmp%></font></td>  
 
                           <td  width="78"  height="24"><p  align="center"><font  size=2><%=number%></font></td>  
 
               <%else%>  
 
<%'如果flag不为0,表示该部门不是首次出现,表格此处就应该输出空白%>  
 
                           <td  width="93"  height="24"><p  align="center">&nbsp;</td>  
 
                           <td  width="78"  height="24"><p  align="center">&nbsp;</td>  
 
               <%end  if%>  
 
<%'无论该部门是否首次出现,此处输出员工姓名%>  
 
                 <td  width="413"  height="24"><p  align="center"><font  size=2><%=rss("name")%></font></td>  
 
               <%rss.movenext      '当前部门员工记录指针rss指向下一个员工记录  
 
               flag=flag+1          'flag加1  
 
   wend%>  
 
   </tr>  
 
   <%rs.movenext    '部门记录指针rs指向下一个部门记录  
 
wend%>  
 
<tr>  
<%''表格最后一行输出总人数合计%>  
 
             <td  width="93"  height="24"><p  align="center"><font  size=2>员工合计</font></td>  
 
             <td  width="78"  height="24"><p  align="center"><font  size=2><%=hj%></font></td>  
 
       <td  width="413"  height="24"><p  align="center"><font  size=2>&nbsp;</font></td>  
 
       </tr>  
 
   </table>  
 
</div>  
 
<center><input  type=button  onclick="vbscript:buildDoc"  value="打印"></center>  <%''点击"打印"按钮,调用vbscript函数buildDoc生成本地Word文档,实现本地打印。%>  
 
</html> 


<%'以下VBScript代码实现buildDoc函数%>

+展开
-HTML
<script  language="vbscript">  
 
Sub  buildDoc  
 
set  table  =  document.all.data      '把html文档中的表格data的结构和数据赋值给table  
 
row  =  table.rows.length      'row为table的行数  
 
column  =  table.rows(1).cells.length      'colnum为table的列数  
 
   
'Set  objWordDoc  =CreateObject("Word.Document")  '创建一个Word.Document的对象  
Set  objWordDoc=CreateObject("Word.Document.8")  
 
'Set  objWordDoc=  CreateObject("Word.Application")  
Dim  theArray(10,10000)      '定义数组变量,存放表格中的数据,10是虚拟列数,10000是虚拟行数  
 
'以下两层for循环将html文档的表格中的纯文本数据赋值给数组  
 
for  i=0  to  row-1  
 
for  j=0  to  column-1  
 
theArray(j+1,i+1)  =  table.rows(i).cells(j).innerTEXT      
 
next  
 
next  
 
   
 
objWordDoc.Application.ActiveDocument.Paragraphs.Add.Range.InsertBefore("公司员工统计表")      '显示表格标题  
 
objWordDoc.Application.ActiveDocument.Paragraphs.Add.Range.InsertBefore("")  '输出标题后回车换行  
 
   
 
Set  rngPara  =  objWordDoc.Application.ActiveDocument.Paragraphs(1).Range  
 
'以下With代码段设置标题属性  
 
With  rngPara  
 
.Bold  =  True      '将标题设为粗体  
 
.ParagraphFormat.Alignment  =  1      '将标题居中  
 
.Font.Name  =  "Arial"        '设定标题字体  
 
.Font.Size  =  12        '设定标题字体大小  
 
End  With  
 
   
 
Set  rngCurrent  =  objWordDoc.Application.ActiveDocument.Paragraphs(3).Range  
 
Set  tabCurrent  =  ObjWordDoc.Application.ActiveDocument.Tables.Add(rngCurrent,row,column)  
 
'以下for循环输出表头  
 
for  i  =  1  to  column  
 
objWordDoc.Application.ActiveDocument.Tables(1).Rows(1).Cells(i).Range.InsertAfter  theArray(i,1)  
 
objWordDoc.Application.ActiveDocument.Tables(1).Rows(1).Cells(i).Range.ParagraphFormat.alignment=1  
 
next  
 
'以下两层for循环输出表格实际内容  
 
For  i  =1  to  column  
 
For  j  =  2  to  row  
 
objWordDoc.Application.ActiveDocument.Tables(1).Rows(j).Cells(i).Range.InsertAfter  theArray(i,j)  
 
objWordDoc.Application.ActiveDocument.Tables(1).Rows(j).Cells(i).Range.ParagraphFormat.alignment=1  
 
Next  
 
Next  
 
objWordDoc.Application.ActiveDocument.SaveAs  
 
End  Sub  
 
</script>   
 
   
 
 
</BODY>  
</HTML>  

数据库TABLE,导入你自己的数据库就可以了
+展开
-SQL
CREATE  TABLE  [personnel]  (  
           [ID]  [int]  IDENTITY  (1,  1)  NOT  NULL  ,  
           [department]  [varchar]  (50)  COLLATE  Chinese_PRC_CI_AS  NULL  ,  
           [name]  [varchar]  (50)  COLLATE  Chinese_PRC_CI_AS  NULL    
)  ON  [PRIMARY]  
GO

加支付宝好友偷能量挖...


评论(0)网络
阅读(114)喜欢(0)Asp/VBScript