怎么将从数据库中查询出来的记录导入到WORD文档里打印预览,IE的打印功能太弱了。
很急,最好有代码,可以给200分的

解决方案 »

  1.   

    IE?  你是不是发错了,IE  你是不是应该在ASP论坛里发啊? ASP里我倒是遇到过这种问题,IE的打印功能的确太弱了。
    我这里正好有个例子,你看是不是合适(我在ASP论坛里)
    <%@ 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 = 3Rs.LockType = 3Rs.Open sql, CnnIf Rs.EOF Then          '如果没有记录就结束   Response.EndEnd 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 = 3rss.LockType = 3rss.Open sqlstr, connnumber=0  '设置变量,当前部门人数合计初始值为0'以下While循环计算出当前部门人数合计while(not rss.eof)rss.movenextnumber=number+1  wendhj=hj+number  '总人数合计为各部门人数之和rss.movefirstflag=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函数%><script language="vbscript">Sub buildDocset table = document.all.data   '把html文档中的表格data的结构和数据赋值给tablerow = 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-1for j=0 to column-1theArray(j+1,i+1) = table.rows(i).cells(j).innerTEXT  nextnext 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).RangeSet tabCurrent = ObjWordDoc.Application.ActiveDocument.Tables.Add(rngCurrent,row,column)'以下for循环输出表头for i = 1 to columnobjWordDoc.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=1next'以下两层for循环输出表格实际内容For i =1 to columnFor j = 2 to rowobjWordDoc.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=1NextNextobjWordDoc.Application.ActiveDocument.SaveAsEnd Sub</script> 
    </BODY>
    </HTML>数据库TABLE,导入你自己的数据库就可以了
    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