ASP生成word文档问题
ASP中怎么能把网页上输出的结果输出到word文档上?我的指导老师给了我以下东西,我不知道怎么用,希望高手解答,我是个新手,我需要说的详细点,如果有知道的我一定高分答谢,...
ASP中怎么能把网页上输出的结果输出到word文档上?我的指导老师给了我以下东西,我不知道怎么用,希望高手解答,我是个新手,我需要说的详细点,如果有知道的我一定高分答谢,有知道的可以在这里留下QQ或者联系方式,谢谢各位高手了
以下是老师给我的(转换后的代码太长了,粘帖不了):
我的解决办法,用Word XP(其他版本还没有试过)制作表格,将做好的Word表格转换为HTML文档,在用ASP控制转换后HTML文档。
页眉、页角的解决办法,在转换带Word页眉、页角的DOC文档后会在转换的HTML文件附加一个文件夹,内有页眉、页角文件及图片,只要在HTML文件的相应位置改变其路径为服务器路径即可。用户打开并ASP生成的Word文件后,Word会自动提示将这些文件保存。
看下面的Word转换后的HTML文,我用ASP加以简单控制:
我的意思是说把整个网页页面上显示出来的东西自动保存到word文档,刚刚有人给了我一段代码:<%
counten = "需要写入的内容"
set fobj=server.Createobject("scripting.filesystemobject")
set texta=fobj.CreatetextFile(server.mappath("测试.doc"),true)
texta.writeline(counten)
%>
你这个不行啊,我还是不会用
相对路径的设置:server.mappath("测试.doc") 及文件名字
使用FSO 就可以做到,你把以上代码复制到一个 ASP 文件中运行一下
就可以看到结果了!
不过用以上的代码只能把编辑好的文字保存出来,要想把网页上的内容都保存下来从逻辑上想不同怎么用啊,希望高手指点(我做的是出卷系统,随机出一套卷子,我想把这套卷子自动导出到word文档) 展开
以下是老师给我的(转换后的代码太长了,粘帖不了):
我的解决办法,用Word XP(其他版本还没有试过)制作表格,将做好的Word表格转换为HTML文档,在用ASP控制转换后HTML文档。
页眉、页角的解决办法,在转换带Word页眉、页角的DOC文档后会在转换的HTML文件附加一个文件夹,内有页眉、页角文件及图片,只要在HTML文件的相应位置改变其路径为服务器路径即可。用户打开并ASP生成的Word文件后,Word会自动提示将这些文件保存。
看下面的Word转换后的HTML文,我用ASP加以简单控制:
我的意思是说把整个网页页面上显示出来的东西自动保存到word文档,刚刚有人给了我一段代码:<%
counten = "需要写入的内容"
set fobj=server.Createobject("scripting.filesystemobject")
set texta=fobj.CreatetextFile(server.mappath("测试.doc"),true)
texta.writeline(counten)
%>
你这个不行啊,我还是不会用
相对路径的设置:server.mappath("测试.doc") 及文件名字
使用FSO 就可以做到,你把以上代码复制到一个 ASP 文件中运行一下
就可以看到结果了!
不过用以上的代码只能把编辑好的文字保存出来,要想把网页上的内容都保存下来从逻辑上想不同怎么用啊,希望高手指点(我做的是出卷系统,随机出一套卷子,我想把这套卷子自动导出到word文档) 展开
3个回答
展开全部
看过网上很多创建word文件的办法,大都会要求客户段浏览器设置安全性,有很大的局限性。
经过本人摸索,找到一条目前本人认为最简易的办法,不敢独享,请朋友们点评。哗唤仔
1 利用word生成相应的word文件,如固定格式的表格等,然后用“另存为”功能存成htm格式。
2 使用记事本等打开,可看见html源码。
3 将代码开始处的以下内容:
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40";>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 11">
<meta name=Originator content="Microsoft Word 11">
改为基本html代码:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
4 在页面最开始处添加以下语句:
<% Response.ContentType = "application/msword"
response.AddHeader "content-disposition", "inline; filename=测试.doc"
' 此处可添加变量处理等语句,如打开数据库获取记录集等。
'
%>
5 在html代码中找到表格中相应位置填入asp变量或数据库字段值。如以下代码链森代表一个单元格:
<td width=114 valign=top style='width:85.2pt;border:solid windowtext 1.0pt;
border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
</td>
可修改为:
<td width=114 valign=top style='width:85.2pt;border:solid windowtext 1.0pt;
border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p> <%=trim(.fields("奖金").value)%>
</td>
注意<%...%>中的内容即是要输出的变量或字段值,(废话,ASP人都知道)
6 保存,扩展名由htm改为asp即可。
运行看看,浏览器自动弹出下载对话框,文件名为“测试.doc”,也可直接打开!
此法最大的优点在于乱汪多么复杂的word格式表格也能轻松搞定。
缺点是html代码稍有点复杂,表格位置不好找。其实在做word文件时在单元格里输入特殊字符,然后在htm代码中查找该字符就可轻松定位。
经过本人摸索,找到一条目前本人认为最简易的办法,不敢独享,请朋友们点评。哗唤仔
1 利用word生成相应的word文件,如固定格式的表格等,然后用“另存为”功能存成htm格式。
2 使用记事本等打开,可看见html源码。
3 将代码开始处的以下内容:
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40";>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 11">
<meta name=Originator content="Microsoft Word 11">
改为基本html代码:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
4 在页面最开始处添加以下语句:
<% Response.ContentType = "application/msword"
response.AddHeader "content-disposition", "inline; filename=测试.doc"
' 此处可添加变量处理等语句,如打开数据库获取记录集等。
'
%>
5 在html代码中找到表格中相应位置填入asp变量或数据库字段值。如以下代码链森代表一个单元格:
<td width=114 valign=top style='width:85.2pt;border:solid windowtext 1.0pt;
border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
</td>
可修改为:
<td width=114 valign=top style='width:85.2pt;border:solid windowtext 1.0pt;
border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p> <%=trim(.fields("奖金").value)%>
</td>
注意<%...%>中的内容即是要输出的变量或字段值,(废话,ASP人都知道)
6 保存,扩展名由htm改为asp即可。
运行看看,浏览器自动弹出下载对话框,文件名为“测试.doc”,也可直接打开!
此法最大的优点在于乱汪多么复杂的word格式表格也能轻松搞定。
缺点是html代码稍有点复杂,表格位置不好找。其实在做word文件时在单元格里输入特殊字符,然后在htm代码中查找该字符就可轻松定位。
博思aippt
2024-07-20 广告
2024-07-20 广告
作为深圳市博思云创科技有限公司的工作人员,对于Word文档生成PPT的操作,我们有以下建议:1. 使用另存为功能:在Word中编辑完文档后,点击文件->另存为,选择PowerPoint演示文稿(*.pptx)格式,即可将文档内容转换为PPT...
点击进入详情页
本回答由博思aippt提供
展开全部
生成WORD不太可能,生成TXT还差不多
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我也提供一段代码你:
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft FrontPage 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"> </td>
<td width="78" height="24"><p align="center"> </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> </font></td>
</tr>
</table>
</div>
<center><input type=button onclick="vbscript:buildDoc" value="打印"></center> <%''点击"打印"按钮,调用vbscript函数buildDoc生成本地Word文档,实现本地打印。%>
</html>
<%'以下VBScript代码实现buildDoc函数%>
<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,导入你自己的数据库就可以了
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
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft FrontPage 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"> </td>
<td width="78" height="24"><p align="center"> </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> </font></td>
</tr>
</table>
</div>
<center><input type=button onclick="vbscript:buildDoc" value="打印"></center> <%''点击"打印"按钮,调用vbscript函数buildDoc生成本地Word文档,实现本地打印。%>
</html>
<%'以下VBScript代码实现buildDoc函数%>
<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,导入你自己的数据库就可以了
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |