如何将网页表格内容导入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 相关文章推荐
JS 动态获取节点代码innerHTML分析 [IE,FF]
Nov 30 Javascript
Document:getElementsByName()使用方法及示例
Oct 28 Javascript
JavaScript返回0-1之间随机数的方法
Apr 06 Javascript
微信小程序 加载 app-service.js 错误解决方法
Oct 12 Javascript
Angular4 中常用的指令入门总结
Jun 12 Javascript
jQuery实现简单的计时器功能实例分析
Aug 29 jQuery
webpack4 升级迁移的实现
Sep 12 Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 Javascript
Vue.js 父子组件通信的十种方式
Oct 30 Javascript
JQueryDOM之样式操作
Mar 27 jQuery
VUE接入腾讯验证码功能(滑块验证)备忘
May 07 Javascript
element中el-container容器与div布局区分详解
May 13 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
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
JS轮播图的实现方法2
2020/08/25 Javascript
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
Python3实现定时任务的四种方式
2019/06/03 Python
python线程信号量semaphore使用解析
2019/11/30 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
普通话演讲稿
2014/09/03 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书