如何将网页表格内容导入excel


Posted in Javascript onFebruary 18, 2014

将访问的页面加入到可信任站点

//导出到Excel,注意,表格标记内不得有注释,因为childNodes会把注释也算进去 
//如果出错,需要关闭Excel,否则Excel进程会一直运行着 
//td中只能有一个input值 
//非td间不可以有组建 否则报缺少“;”错误 
//引用页面加上<script type="text/javascript" src="execl.js"></script> 
//添加按钮<input style="height:26px" type="button" name="btnExcel" value="导出excel" onClick="ExportExcel(this,'tableNr','','表头');"/> 
//将table表的id和class设置为tableNr 
function ExportExcel(btn,TabId,strCols,sTitle,sHeader,sFooter){ 
//alert('ssss'); 
btn.style.cursor = "wait"; 
event.returnValue = false; 
//try{ 
var tab = document.getElementById(TabId); 
// if(tab == null) tab = document.getElementById("dg") 
//if(tab == null) tab = document.getElementById("db") 
//if(tab == null) tab = document.getElementById(TabId) 
if(tab == null){ 
alert("缺少表格对象"); 
btn.style.cursor = "hand"; 
return; 
} 
var t = tab.firstChild; 
var rows = t.childNodes.length; 
//alert(t.nodeName); //test 
var tds = t.childNodes[0].childNodes.length; 
var cols = 0; 
for(var i=0;i<tds;i++){ 
var td = t.childNodes[0].childNodes[i]; 
if(parseInt(td.colSpan)>1){ 
cols += parseInt(td.colSpan); 
} 
else{ 
cols++; 
} 
} 
try{ 
var oXL = new ActiveXObject("Excel.Application"); 
}catch(e){ 
alert("请确认已经安装了Excel并允许运行Excel!"); 
alert("无法启动Excel,请确保电脑中已经安装了Excel!\n\n如果已经安装了Excel,"+"请将ip地址加入信任站点,并调整IE信任站点的安全级别。\n\n具体操作:\n\n"+"工具 → Internet选项 → 安全 → 自定义级别 → ActiveX 控件和插件 → 对未标记为可安全执行脚本的ActiveX 控件初始化并执行脚本 → 启用 → 确定"); 
btn.style.cursor = "hand"; 
return; 
} 
oXL.Workbooks.Add(); 
var obook = oXL.ActiveWorkBook; 
var osheets = obook.Worksheets; 
var osheet = obook.Sheets(1); 
var xlrow = 1; 
//添加标题 
if((sTitle == "") || (typeof(sTitle)=="undefined") || (sTitle==null)){ 
var t_tdHeadc = document.getElementById("tdHeadc"); 
if(t_tdHeadc != null){ 
sTitle = t_tdHeadc.innerText; 
var sk = sTitle.lastIndexOf("-->")+3; 
sTitle = sTitle.substring(sk); 
} 
} 
osheet.Cells(1, 1) = sTitle; 
osheet.Range(osheet.Cells(xlrow, 1),osheet.Cells(xlrow,cols)).Select(); //选择该列 
oXL.Selection.HorizontalAlignment = 3; //居中 
oXL.Selection.MergeCells = true; 
xlrow++; 
//小标题 
if((sHeader == "") || (typeof(sHeader)=="undefined") || (sHeader==null)){ 
sHeader = ""; 
} 
if(sHeader != ""){ 
osheet.Cells(2, 1) = sHeader; 
osheet.Range(osheet.Cells(xlrow, 1),osheet.Cells(xlrow,cols)).Select(); //选择该列 
//oXL.Selection.HorizontalAlignment = 3; //居中 
oXL.Selection.MergeCells = true; 
xlrow++; 
} 
var winX = (screen.width - 300) / 2; 
var winY = (screen.height - 120) / 2; var win = window.open("","","directories=0,location=0,memubar=0,scrollbars=0,status=0,toolbar=0,width=230,height=75,left=" + winX + ",top=" + winY); 
win.document.write('<html><title>' + sTitle + '导出Excel</title><body><div id="m_pub_wzs_progress_x" style="background:white;overflow:hidden;padding-top:0;display:none;position:absolute;left:10px;top:25px;"><table id="m_pub_wzs_progress_tab" border=0 cellspacing=1 bgcolor="#CCCCCC" style="display:inline;border-width:1px;border-style:solid;border-left-color:#333333;border-top-color:#333333;border-right-color:#EEEEEE;border-bottom-color:#EEEEEE;">'); 
win.document.write('<tr height=17><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#000088"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td><td width=4 bgcolor="#CCCCCC"></td>'); 
win.document.write('</tr></table><br><span id="m_pub_wzs_progress_percent" style="font-size:10pt;vertical-align:middle;color:black;font-family:宋体">总计' + rows + '行,已导出<font id="sx" color="#cc0000"></font>行!</span></div><br /><br /><br /><script language="javascript">var osx=document.getElementById("sx");var div = document.getElementById("m_pub_wzs_progress_x");function m_pub_wzs_progress_show(pTotalCount,pCurrCount){osx.innerText = pCurrCount;var m = Math.floor(pCurrCount / pTotalCount * 30);div.style.display = "";var tr = div.firstChild.rows[0];for(var i=0;i<tr.cells.length;i++){var td=tr.cells[i]; if(i<m) td.bgColor="#000088"; else td.bgColor="#CCCCCC";}}function m_pub_wzs_progress_hide(){ var div = document.getElementById("m_pub_wzs_progress_x"); div.style.display = "none";}</script></body></html> '); 
//win.document.write("<div style='font-size:10pt;font-family:宋体'>总共" + rows + "行,已导出<font id='sx' color='#cc0000'></font>行!</div>"); 
//win.m_pub_wzs_progress_show(0,rows); 
strCols = ","+strCols+","; 
var aRowSpans = new Array(); 
for(var i=0;i<cols;i++){ 
aRowSpans[i] = 1; 
} 
var isProgressErr = false; 
for(var i = 0; i < rows; i++){ 
//btn.value = i; 
if(!isProgressErr){ 
try{ 
win.m_pub_wzs_progress_show(rows,i+1); 
} 
catch(e){ 
isProgressErr = true; 
} 
} 
var row = t.childNodes[i]; 
var xlcol =0; 
var viwCol = -1; //所在表格的位置,指显示位置,如果有行合并时,会与列索引不一致 
var colInx = -1; 
var colSpans = 1; 
for(var h = 0; h < cols; h++){ 
if(aRowSpans[h]>1){ 
xlcol++; 
aRowSpans[h]--; 
viwCol++; 
continue; 
} 
else{ 
colInx++; 
} 
var td = t.childNodes[i].childNodes[colInx]; 
if(td == null) continue; 
colSpans = td.colSpan; 
var rowSpan = td.rowSpan; 
if(isNaN(rowSpan)) rowSpan = 1; 
for(var k=0;k<td.colSpan;k++){ 
viwCol++; 
xlcol++; 
aRowSpans[viwCol] = rowSpan; 
} 
h+=td.colSpan-1; //跳过合并列 
if(td.className=="hideNode"){ 
xlcol--; 
continue; 
} 
var s = ""; 
if(td.hasChildNodes() && td.firstChild.nodeName.toLowerCase()=="input"){ 
if(td.firstChild.type.toLowerCase()=="text"){ 
s = td.firstChild.value; 
} 
else if(td.firstChild.type.toLowerCase()=="radio"){ //如果是单选框, 遍历该框所有单选框,找到选择的值 
for(var k=0;k<td.childNodes.length;k++){ 
var cn = td.childNodes[k]; 
if(cn.nodeName.toLowerCase()=="input" && cn.type.toLowerCase() == "radio" && cn.checked){ 
s = cn.value; 
break; 
} 
} 
} 
} 
else{ 
s = td.innerText; 
} 
if(strCols.indexOf("," + (xlcol-1) + ",")!=-1){ 
osheet.Cells(xlrow,xlcol).NumberFormatLocal = '@'; 
} 
if(td.rowSpan>1 || td.colSpan>1){ 
osheet.range(osheet.cells(xlrow,xlcol),osheet.cells(xlrow-1+td.rowSpan, xlcol-td.colSpan+1)).Select(); 
oXL.Selection.MergeCells = true; 
osheet.Cells(xlrow,xlcol).HorizontalAlignment = 3; 
//osheet.cells(i+td.rowSpan, xlcol-td.colSpan+1).value = s; 
osheet.Cells(xlrow,xlcol-td.colSpan+1).value = s;//m_splitLen(s,30,'\r\n'); 
}else{ 
osheet.Cells(xlrow,xlcol).value = s;//m_splitLen(s,30,'\r\n'); 
} 
} 
xlrow++; 
} 
//添加表尾 
if((sFooter == "") || (typeof(sFooter)=="undefined") || (sFooter==null)){ 
sFooter = ""; 
} 
var d = new Date(); 
var sUser = ""; 
if((window.parent != null) && (window.parent.parent != null)){ 
try{ 
sUser = window.parent.parent.bottomFrame.document.getElementById("labUser").innerText.replace("用户:","").replace(/ /g,""); 
} 
catch(ex){ 
} 
} 
var sFooterDefault = " 制表人:" + sUser + " 制表时间:" + d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() + " "; 
osheet.Cells(xlrow, 1) = sFooterDefault + sFooter; 
osheet.Range(osheet.Cells(xlrow, 1),osheet.Cells(xlrow,cols)).Select(); //选择该列//oXL.Selection.HorizontalAlignment = 4; //居中 
oXL.Selection.MergeCells = true; 
osheet.Range(osheet.Cells(1, 1),osheet.Cells(1,1)).Select(); //选择第一个单元格列 
osheet.Columns.AutoFit(); //自动列宽 
for(var i=1;i<xlrow;i++){ 
osheet.Rows(i).RowHeight = osheet.Rows(i).RowHeight + 6; //自动大小后上下无边距,需要增加高度,要不太挤。 
} 
if(!isProgressErr){ //关闭进度条 
win.close(); 
} 
oXL.Visible = true; 
oXL.UserControl = true; 
oXL = null; 
obook = null; 
osheets = null; 
osheet = null; 
btn.style.cursor = "hand"; 
}
Javascript 相关文章推荐
jquery.cookie用法详细解析
Dec 18 Javascript
jquery禁用右键单击功能屏蔽F5刷新
Mar 17 Javascript
详解js图片轮播效果实现原理
Dec 17 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
Aug 17 Javascript
详解Angular的双向数据绑定(MV-VM)
Dec 26 Javascript
微信小程序 商城开发(ecshop )简单实例
Apr 07 Javascript
详解vue.js的devtools安装
May 26 Javascript
关于javascript作用域的常见面试题分享
Jun 18 Javascript
基于LayUI实现前端分页功能的方法
Jul 22 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
Oct 16 Javascript
JavaScript生成指定范围的时间列表
Mar 19 Javascript
浅谈Webpack核心模块tapable解析
Sep 11 Javascript
js charAt的使用示例
Feb 18 #Javascript
jQuery 回车事件enter使用示例
Feb 18 #Javascript
js 本地预览的简单实现方法
Feb 18 #Javascript
简单js代码实现selece二级联动(推荐)
Feb 18 #Javascript
超简单JS二级、多级联动的简单实例
Feb 18 #Javascript
jquery easyui中treegrid用法的简单实例
Feb 18 #Javascript
DIV始终居中的js代码
Feb 17 #Javascript
You might like
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
php生成gif动画的方法
2015/11/05 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
juqery 学习之四 筛选过滤
2010/11/30 Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
jQuery实现高亮显示网页关键词的方法
2015/08/07 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
Python中用于返回绝对值的abs()方法
2015/05/14 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
django+mysql的使用示例
2018/11/23 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
Python如何测试stdout输出
2020/08/10 Python
Python实现区域填充的示例代码
2021/02/03 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
教师师德反思材料
2014/02/15 职场文书
手术室护士长竞聘书
2014/03/31 职场文书
《忆江南》教学反思
2014/04/07 职场文书
中学生英语演讲稿
2014/04/26 职场文书
小露珠教学反思
2014/04/30 职场文书
初中毕业典礼演讲稿
2014/09/09 职场文书
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python
nginx结合openssl实现https的方法
2021/07/25 Servers
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis