导出网页中的table到excelWord文档下载推荐.docx
- 文档编号:17315683
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:10
- 大小:20.39KB
导出网页中的table到excelWord文档下载推荐.docx
《导出网页中的table到excelWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《导出网页中的table到excelWord文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
itemid=0000000065
***************************************************************************************************
一、将网页资料以excel报表以线上浏览方式呈现
xls651.jsp原始码如下
<
%@pagecontentType="
application/msexcel"
%>
!
--以上这行设定本网页为excel格式的网页-->
%
response.setHeader("
Content-disposition"
"
inline;
filename=test1.xls"
//以上这行设定传送到前端浏览器时的档名为test1.xls
//就是靠这一行,让前端浏览器以为接收到一个excel档
%>
html>
head>
title>
Excel档案呈现方式<
/title>
/head>
body>
<
tableborder="
1"
width="
100%"
tr>
td>
姓名<
/td>
身份证字号<
生日<
/tr>
李玟<
N111111111<
1900/11/12<
梁静如<
N222222222<
1923/10/1<
张惠妹<
N333333333<
1934/12/18<
/table>
/body>
/html>
二、将网页资料以excel报表以下载的方式呈现
这个jsp档和上一个差不多,只有差别在这一行:
线上浏览的方式:
下载的方式:
attachment;
filename=test2.xls"
附注:
1.以上纯以静态网页的方式呈现excel档,配合资料库,你便能以动态的报表方式做出excel报表了
2.完全不用安装任何元件,或只能受限於win平台,一个简单的方式解决你的报表需求
3.聪明的你,应该能举一反三,知道如何将网页资料以word的doc格式展现了吧!
(是不是只要把contentType改成"
application/msword"
以及filename的副档名改成.doc就可以了!
)
试了一下,发现不错,于是就用这个来做了。
功能终于实现。
细想一下,其实这个方法也蛮不错的,只是要实现功能的话,代码写起来要稍微比那个javascirpt麻烦点。
也幸好office的功能比较强大,呵呵
感想:
工作以后,按客户的要求,一直要做这个做那个,其实也正是因为这样,学会了很多东西,自学能力也增强不少,工作的这几个月几乎比在大学里几年中所学到的还要多。
也许也正是因为这样吧,会有点点小小的成就感,也就让我更加喜欢工作,不觉得工作乏味,嘿~或者这也是一种动力吧
Web中Table转excel
经常看到有些人问怎么把Table的资料转到Excel里面去,很多人在碰到这个问题都先考虑用execl.appliction,使用不太好,首先必需要掌握它的一些内部用法,其次它在客户端使用时涉及安全性,以下介绍三种方法:
方法一:
用单纯的文本格式实现
该方法相当简单,以下给出代码,各位就容易明白
%setfso=server.createobject("
scripting.filesystemobject"
)
strExcelFile=server.MapPath("
txtToExcel.xls"
iffso.fileExists(strExcelFile)thenfso.deletefilestrExcelFile
SetxslFile=fso.CreateTextFile(strExcelFile,True)
xslFile.WriteLine("
df"
&
vbTab&
"
345"
vbLf&
fe"
mon"
vbLf)
xslFile.Close
setfso=nothing
response.write"
OK"
原理:
相信大家都知道,Excel是可以打开文本文件的,而对于里面的文本内容Excel则会这样处理:
如果遇到[制表符]Tab键则跳下一列,如果遇到[换行符]则换下一行,所以根据这个规则我们整理一下就可以产生单一表格式Excel文件了,
优点:
掌握简单,纯粹的文字整理而已。
缺点:
效率较低,把一个较多内容的table转成Excel档要则执行较长的循环(),而文档格式只能是规则的行列格式,对表格不能做更多的设置
方法二:
用OWC实现:
此方法也简单,只是少为人知而已,同样先给出代码:
scriptlanguage="
javascript"
functionexportExcel(atblData){
if(typeof(EXPORT_OBJECT)!
="
object"
){
document.body.insertAdjacentHTML("
afterBegin"
OBJECTstyle=’display:
none’classid=clsid:
0002E510-0000-0000-C000-000000000046id=EXPORT_OBJECT>
/Object>
"
}
with(EXPORT_OBJECT){
DataType="
HTMLData"
;
HTMLData=atblData.outerHTML;
try{
ActiveSheet.Export("
C:
\\owcToExcel.xls"
0);
alert(’汇出完毕’);
catch(e){
alert(’汇出Excel表失败,请确定已安装Excel2000(或更高版本),并且没打开同名xls文件’);
}
/script>
tableid="
tblData"
gdsssa<
445<
inputtype="
button"
value="
export"
onclick="
exportExcel(tblData)"
大家应该看出这是前端脚本html实现,其实这是利用OWC的功能来转出Excel档,我们只需整理出一个Table档,基本上我们整理出的Table在网页上是什么样子,在Excel上就是什么样子,但要注意:
网页里的<
style>
不会汇出到Excel中,所以网页里的样式表不会在Excel中看到.
掌握也很简单,而且可以在前台实现,并且不会设计权限问题,为前台产生Excel档存到客户端而伤透脑筋的兄弟姐妹们,这个方法.
客户端必需安装Excel2000或更高版本(不过这个一般都不成问题的了),而且样式表的内容不能输出。
方法三:
利用XML来产生
首先讲讲道理,先随便编一个Excel档,然后把它另存为*.htm文件,再用文本编辑器打开,是不是跟我们一般的网页内容非常相似,那么我们是不是只需要整理出这些文字出来就可以了,关键是怎样整理出这份文本文字档案呢
我们分析一下这些文字,第一部分是<
样式表的定义,第二部分是Excel特有的定义内容,第三部分是则是最熟悉的Table数据了,那么对于这三部分,前两部分基本是固定了,我整理一下基本只需要这些:
htmlxmlns:
s="
uuid:
BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:
dt="
C2F41010-65B3-11d1-A29F-00AA00C14882"
rs="
urn:
schemas-microsoft-com:
rowset"
z="
#RowsetSchema"
o="
office:
office"
x="
excel"
xmlns="
//www.w3.org/TR/REC-html40"
metahttp-equiv="
Content-Type"
content="
text/html;
/>
xl24{mso-style-parent:
style0;
mso-number-format:
\@"
text-align:
right;
/style>
xml>
x:
ExcelWorkbook>
ExcelWorksheets>
ExcelWorksheet>
Name>
Sheet1<
/x:
WorksheetOptions>
ProtectContents>
False<
ProtectObjects>
ProtectScenarios>
/xml>
然后是第三部分,我们可以通过recordset来读取数据的指定内容,而且可以通过save来直接把那些内容生成一个xml文件,所以我们只需要根据这个xml文件写一个xsl文件来转换就行了,那么这个方法是我认为最好的,因为我们可以任意设定Table的样式,同时不必诸多循环,有效解决Excel一些自做聪明的小动作
这种方法的优点是你可以定制很好的格式的Excel文件,只要你xsl会写,包括统计都可以做出来,所以懂xsl的人估计来到这里比较明白了,而且效率很高,不用再慢慢循环了
缺点嘛:
就是技术要求高了一点,至于算有多高,各人不同了。
最后附上代码:
===========xmlToExcel.asp=============
%SetConn=Server.CreateObject("
ADODB.Connection"
Conn.Open"
Provider=Microsoft.Jet.OLEDB.4.0;
DataSource="
&
Server.MapPath("
comp_apply.mdb"
’strSelect="
selectdept_no,dept_name,dept_checkfromdept_data"
strSelect="
select*fromuser_data"
’改变该SQL语句则可改变excel的内容
Setrs=server.createobject("
adodb.recordset"
rs.openstrSelect,conn,1,1
setfso=server.createobject("
strXmlFile=server.MapPath("
xmlToExcelTmp.xml"
strXslFile=server.MapPath("
xmlToExcel.xsl"
xmlToExcel.xls"
iffso.fileExists(strXmlFile)thenfso.deletefilestrXmlFile
rs.savestrXmlFile,1
rs.close
Conn.close
setConn=nothing
setxmlDoc=server.createobject("
microsoft.xmldom"
setxslDoc=server.createobject("
xslDoc.load(strXslFile)
xmlDoc.load(strXmlFile)
xmlDoc.loadXml(xmlDoc.transformNode(xslDoc))
iffso.fileExists(strExcelFile)thenfso.deletefilestrExcelFile
SetxslFile=fso.CreateTextFile(strExcelFile,True)
xslFile.WriteLine(xmlDoc.xml)
xslFile.Close
fso.deletefilestrXmlFile
setfso=nothing
response.redirect"
==============xmlToExcel.xsl=============
xsl:
stylesheetversion="
1.0"
xsl="
//www.w3.org/1999/XSL/Transform"
xmlns:
s=’uuid:
BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882’
dt=’uuid:
C2F41010-65B3-11d1-A29F-00AA00C14882’
rs=’urn:
rowset’
z=’#RowsetSchema’>
outputmethod="
html"
indent="
yes"
/>
templatematch="
xml/rs:
data"
charset=gb2312"
.xl24{mso-style-parent:
cellpadding="
0"
cellspacing="
for-eachselect="
/xml/s:
Schema/s:
ElementType/s:
AttributeType"
th>
value-ofselect="
@name"
/th>
/xsl:
for-each>
apply-templatesselect="
z:
row"
template>
variablename="
position"
position()"
variable>
--读取定义好的数据列名-->
strColumn"
strvalue"
/xml/rs:
data/z:
row[position()=$position]/@*[name()=$strColumn]"
tdclass="
xl24"
$strvalue"
stylesheet>
补充一下:
对于第三种方法因为Recordset用Save方法后有时对于那些null的字段在row中不会有它的字段名,所以我现在通过去ElementType那里读取字段名,以保证不造成到时的Excel的纵列方位出错,但这个问题在.net里的DataSet确很好解决,因为DataSet中如果碰到这种null的数据它也会有<
columnName/>
这样的空节点出现。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 导出 网页 中的 table excel