`
terryfeng
  • 浏览: 504855 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Javascript实现把网页中table的内容导入到excel中的几种方法

阅读更多

原文:http://www.cublog.cn/u/23292/showart.php?id=162129

一、 直接拷贝整个表格到EXCEL中

二、 通过遍历表格,给EXCEL中相应的单元格赋值。

三、 把表格中的内容提取出来,利用IE的另存为.csv的格式。

各方法的好处:

1. 直接拷贝表格,能够保留表格中的原有的格式,比如,列,行的合并,对齐方式,底色等等,

2. 通过遍历表格,比较灵活,可以遍历表格某些需要部分的内容。

3. 利用IE的另存为,不用创建ActiveXObject对象,可以处理表格合并方面的问题。

各方法的缺点:

1. 可能弹出脚本错误:Automation不能创建对象。

解决方法:启用IE安全设置中的:对没有标记为安全的ActiveX控件进行初始化和脚本运行。

由于整个表格复制到EXCEL中,给表格加个标题,并加入到EXCEL中可能会遇到麻烦。

解决方法:首先在表格中加入第一行

<tr><td colspan="x" align="center">&</td></tr>

X,表示整个表格的列数,复制完整个表格后,加如下代码,oSheet为当前活动的sheet.

oSheet.Range(oSheet.Cells(1, 1), oSheet.Cells(1, x)).value = "表格标题";//设置标题

oSheet.Rows(1).Font.Size = 16; //设置文字大小

oSheet.Rows(1).Font.Name = "宋体";//设置文字字体

注:以下属性我没用着,可能有用,也可能会报错

oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(1,14)).mergecells=true; //合并单元格

oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(1,14)).Interior.ColorIndex=6;//设置底色?

oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(1,14)).Font.ColorIndex=5;//设置字体色?

oSheet.Rows(1).RowHeight=20; //设置列高

oSheet.Cells(iRow,iCol).Halignment=’2’//设置字体居中

2. 可能弹出脚本错误:Automation不能创建对象(解决方法如上)。

表格内容写入到EXCEL中无表格线(未解决)

且有单元格合并时会有问题,解决方法:合并单元格后再写数据。

oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(1,14)).mergecells=true; //合并单元格

3. 表格内容写入到EXCEL中无表格线(未解决)

表格格式复杂时,会有问题,(rowspan>1 or colspan>1),解决方法:一般都是表头格式比较复杂,可先把表头写死,然后再循环写其他数据。

网页内容如下:(可直接拷贝到记事本,然后保存为html格式,用IE打开,有问题欢迎交流:joyleo@126.com)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

<title>WEB页面导出为EXCEL文档的方法</title>

</head>

<body>

<table id="tableExcel" width="100%" border="1" cellspacing="0" cellpadding="0">

<tr>

<td colspan="5" align="center">WEB页面导出为EXCEL文档的方法</td>

</tr>

<tr>

<td>列标题1</td>

<td>列标题2</td>

<td>列标题3</td>

<td>列标题4</td>

<td>列标题5</td>

</tr>

<tr>

<td>aaa</td>

<td>bbb</td>

<td>ccc</td>

<td>ddd</td>

<td>eee</td>

</tr>

<tr>

<td>AAA</td>

<td>BBB</td>

<td>CCC</td>

<td>DDD</td>

<td>EEE</td>

</tr>

<tr>

<td>FFF</td>

<td>GGG</td>

<td>HHH</td>

<td>III</td>

<td>JJJ</td>

</tr>

</table>

<input type="button" onclick="javascript:method1('tableExcel');" value="第一种方法导入到EXCEL">

<input type="button" onclick="javascript:method2('tableExcel');" value="第二种方法导入到EXCEL">

<input type="button" onclick="javascript:getXlsFromTbl('tableExcel',null);" value="第三种方法导入到EXCEL">

<SCRIPT LANGUAGE="javascript">

function method1(tableid) {//整个表格拷贝到EXCEL中

var curTbl = document.getElementById(tableid);

var oXL = new ActiveXObject("Excel.Application");

//创建AX对象excel

var oWB = oXL.Workbooks.Add();

//获取workbook对象

var oSheet = oWB.ActiveSheet;

//激活当前sheet

var sel = document.body.createTextRange();

sel.moveToElementText(curTbl);

//把表格中的内容移到TextRange中

sel.select();

//全选TextRange中内容

sel.execCommand("Copy");

//复制TextRange中内容

oSheet.Paste();

//粘贴到活动的EXCEL中

oXL.Visible = true;

//设置excel可见属性

}

function method2(tableid) //读取表格中每个单元到EXCEL中

{

var curTbl = document.getElementById(tableid);

var oXL = new ActiveXObject("Excel.Application");

//创建AX对象excel

var oWB = oXL.Workbooks.Add();

//获取workbook对象

var oSheet = oWB.ActiveSheet;

//激活当前sheet

var Lenr = curTbl.rows.length;

//取得表格行数

for (i = 0; i < Lenr; i++)

{

var Lenc = curTbl.rows(i).cells.length;

//取得每行的列数

for (j = 0; j < Lenc; j++)

{

oSheet.Cells(i + 1, j + 1).value = curTbl.rows(i).cells(j).innerText;

//赋值

}

}

oXL.Visible = true;

//设置excel可见属性

}

function getXlsFromTbl(inTblId, inWindow) {

try {

var allStr = "";

var curStr = "";

//alert("getXlsFromTbl");

if (inTblId != null && inTblId != "" && inTblId != "null") {

curStr = getTblData(inTblId, inWindow);

}

if (curStr != null) {

allStr += curStr;

}

else {

alert("你要导出的表不存在!");

return;

}

var fileName = getExcelFileName();

doFileExport(fileName, allStr);

}

catch(e) {

alert("导出发生异常:" + e.name + "->" + e.description + "!");

}

}

function getTblData(inTbl, inWindow) {

var rows = 0;

//alert("getTblData is " + inWindow);

var tblDocument = document;

if (!!inWindow && inWindow != "") {

if (!document.all(inWindow)) {

return null;

}

else {

tblDocument = eval(inWindow).document;

}

}

var curTbl = tblDocument.getElementById(inTbl);

var outStr = "";

if (curTbl != null) {

for (var j = 0; j < curTbl.rows.length; j++) {

//alert("j is " + j);

for (var i = 0; i < curTbl.rows[j].cells.length; i++) {

//alert("i is " + i);

if (i == 0 && rows > 0) {

outStr += " \t";

rows -= 1;

}

outStr += curTbl.rows[j].cells[i].innerText + "\t";

if (curTbl.rows[j].cells[i].colSpan > 1) {

for (var k = 0; k < curTbl.rows[j].cells[i].colSpan - 1; k++) {

outStr += " \t";

}

}

if (i == 0) {

if (rows == 0 && curTbl.rows[j].cells[i].rowSpan > 1) {

rows = curTbl.rows[j].cells[i].rowSpan - 1;

}

}

}

outStr += "\r\n";

}

}

else {

outStr = null;

alert(inTbl + "不存在!");

}

return outStr;

}

function getExcelFileName() {

var d = new Date();

var curYear = d.getYear();

var curMonth = "" + (d.getMonth() + 1);

var curDate = "" + d.getDate();

var curHour = "" + d.getHours();

var curMinute = "" + d.getMinutes();

var curSecond = "" + d.getSeconds();

if (curMonth.length == 1) {

curMonth = "0" + curMonth;

}

if (curDate.length == 1) {

curDate = "0" + curDate;

}

if (curHour.length == 1) {

curHour = "0" + curHour;

}

if (curMinute.length == 1) {

curMinute = "0" + curMinute;

}

if (curSecond.length == 1) {

curSecond = "0" + curSecond;

}

var fileName = "leo_zhang" + "_" + curYear + curMonth + curDate + "_"

+ curHour + curMinute + curSecond + ".csv";

//alert(fileName);

return fileName;

}

function doFileExport(inName, inStr) {

var xlsWin = null;

if (!!document.all("glbHideFrm")) {

xlsWin = glbHideFrm;

}

else {

var width = 6;

var height = 4;

var openPara = "left=" + (window.screen.width / 2 - width / 2)

+ ",top=" + (window.screen.height / 2 - height / 2)

+ ",scrollbars=no,width=" + width + ",height=" + height;

xlsWin = window.open("", "_blank", openPara);

}

xlsWin.document.write(inStr);

xlsWin.document.close();

xlsWin.document.execCommand('Saveas', true, inName);

xlsWin.close();

}

</SCRIPT>

</body>

</html>

分享到:
评论

相关推荐

    javascript 将table数据导出到excel中(支持表格线的导出)

    在JavaScript中将HTML表格数据导出到Excel是常见的需求,特别是在网页交互中处理大量数据时。这个过程涉及到几个关键步骤,包括数据获取、格式转换以及文件下载触发。在这个实例中,我们将探讨如何实现这一功能,...

    js操作table导出excel

    HTML表格(table)是网页中组织结构化数据的常见方式,而Excel则是一种流行的电子表格应用程序,用于处理和分析数据。 要将HTML表格转换为Excel文件,我们首先需要选择一个合适的库或方法。一个常见的选择是使用`...

    layui-excel数据导入demo-源码-导入即用

    layui-excel数据导入功能的核心在于,它提供了一种便捷的方式,允许用户直接通过Excel文件导入数据到前端表格中。这一特性极大地简化了数据输入和管理流程,尤其适用于需要大量数据录入的场景。以下我们将详细介绍这...

    利用Jscrīpt复制网页中的表格到Excel中

    根据给定的信息,本文将详细解释如何利用JavaScript技术将网页中的表格内容复制到Excel的一个工作表(Sheet)中。此方法对于需要频繁处理表格数据、并希望将其转换为Excel格式以便进行进一步分析或报告的人来说非常...

    C#实现excel转json[工具+源码]

    Excel是一种广泛使用的电子表格工具,而JSON(JavaScript Object Notation)则是一种轻量级的数据交换格式,因其易于人阅读和机器解析,被广泛应用于前后端数据传输。 首先,要实现这个功能,我们需要理解C#中的两...

    MYSQL数据导入

    下面我们将详细探讨MySQL数据导入的几种常见方法、步骤以及相关的注意事项。 1. **使用LOAD DATA INFILE命令** `LOAD DATA INFILE` 是MySQL提供的一个高效的数据导入工具,它能够快速地从CSV或其他文本文件中导入...

    vue+vue-resource+elementUI table组件实现增删改查和分页源码

    综上所述,本项目通过Vue.js、vue-resource和Element UI实现了具有表格操作功能和分页功能的前端应用,同时也包含了Excel导入导出的高级特性。这展示了Vue.js生态的灵活性和易用性,以及Element UI在界面设计上的...

    Table 绘制 撤销

    在IT领域,表格(Table)是一种常见的数据组织和展示方式,尤其在网页设计、数据分析、文档编辑等场景中,表格的使用无处不在。本文将深入探讨“Table绘制及撤销”这一主题,主要涵盖以下几个方面: 1. **表格的...

    一款可以将普通HTML表格内容导出为CSVXLSTXT或SQL格式的jQuery插件

    标题中的“一款可以将普通HTML表格内容导出为CSVXLSTXT或SQL格式的jQuery插件”揭示了这个jQuery插件的主要功能,即它能够帮助开发者将网页中的HTML表格数据转换成不同格式,如CSV(逗号分隔值)、XLS(Excel文件)...

    纯jQuery导出Excel_已测试可用.zip

    而“纯jQuery导出Excel”指的是利用jQuery来实现从网页中将数据导出到Excel文件的功能。这个压缩包文件“纯jQuery导出Excel_已测试可用.zip”包含了实现这一功能的相关代码和资源,已经过测试,可以正常工作。 要...

    VBA处理网页基础一.doc

    此外,还可以使用QueryTable对象在Excel中直接导入网页数据,简化数据提取过程。 对于动态网页和实时数据,VBA可以利用AJAX(Asynchronous JavaScript and XML)技术,实现无刷新页面更新,或者使用长连接技术保持...

    LotusDomino学习笔记.doc

    - **使用方法**: 通过导入XML数据到Domino Designer中,然后使用XPages或代理来处理这些数据。 #### 45. 在Domino Designer上执行XML - **执行方法**: 使用代理或XPages来解析和处理XML数据。 #### 46. Show ...

    json转表格html

    可以先将JSON数据导入Excel,通过公式或VBA脚本来处理复杂格式,然后导出为CSV或XML,这些格式更容易被编程语言解析。 4. **使用jxl、poi库**:`jxl`是Java的一个库,用于读写Excel文件,而`poi`是Apache的一个项目...

    特别好的web表格控件

    在实际应用中,开发者可以通过引用这个JavaScript库,结合自身的项目需求,调用其提供的API和方法,实现各种复杂的表格功能,提升网页的业务处理能力和用户满意度。同时,良好的文档支持和社区资源将帮助开发者解决...

    excelmick

    1. **数据导入**:开发者可能会使用JavaScript库,如`SheetJS`(也称为`xlsx`),将Excel文件中的数据读取到网页中。这个库可以解析xls/xlsx文件,并将数据转换为JavaScript对象,方便在HTML中显示或操作。 2. **...

    ASP.NET程序开发范例宝典(C#)

    通过示例演示如何将Excel文件中的数据导入到`GridView`控件中。 - **示例103**:`GridView`控件导出Excel文件样式。讲解如何设置导出的Excel文件的样式。 - **5.10 GridView高级应用** - **示例104**:`GridView`...

    2021-2022计算机二级等级考试试题及答案No.19208.docx

    - 在几种排序方法中,要求内存量最大的是**归并排序**。 - 归并排序是一种基于分治策略的排序算法,它需要额外的空间来存储临时数组。 ### 计算机存储单位 19. **计算机存储单位** - 在计算机中,1024B被称为...

    网管教程 从入门到精通软件篇.txt

    Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh...

Global site tag (gtag.js) - Google Analytics