没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2009-09-17 14:53:52.000|阅读 938 次
概述:使用JavaScript将表格导出为Excel文件是一种比较常见的导出方法,但复杂表格的导出比较麻烦(比如报表的导出),为此我专门写了一段代码专门处理表格导出,与各位分享一下。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
使用JavaScript将表格导出为Excel文件是一种比较常见的导出方法,但复杂表格的导出比较麻烦(比如报表的导出),为此我专门写了一段代码专门处理表格导出,与各位分享一下。
util.js:
/**
* Utilities for exporting a table as an excel file
* @author Daniel.Sun(山风小子)
* @version 0.6
*/
var idTmr = "";
function Cleanup() {
window.clearInterval(idTmr);
CollectGarbage();
}
function exportAsXls(table) {
function ImpactedCell(row, col, offset) {
this.row = row;
this.col = col;
this.offset = offset;
}
function CurrentCell(row, col, text, colspan, rowspan) {
this.row = row;
this.col = col;
this.text = text;
this.colspan = colspan;
this.rowspan = rowspan;
this.getRow = function getRow() {
return this.row;
}
this.setRow = function setRow(row) {
this.row = row;
}
this.getCol = function getCol() {
return this.col;
}
this.setCol = function setCol(col) {
this.col = col;
}
this.setColspan = function setColspan(colspan) {
this.colspan = colspan;
}
this.getColspan = function getColspan() {
return this.colspan;
}
this.setRowspan = function setRowspan(rowspan) {
this.rowspan = rowspan;
}
this.getRowspan = function getRowspan() {
return this.rowspan;
}
}
function CellManager(originalRow, colOffset, impactedCells, currentCell) {
this.originalRow = originalRow;
this.colOffset = colOffset;
this.impactedCells = impactedCells;
this.currentCell = currentCell;
this.setCurrentCell = function setCurrentCell(currentCell) {
this.currentCell = currentCell;
}
this.setOriginalRow = function setOriginalRow(originalRow) {
this.originalRow = originalRow;
}
this.getCorrectedCol = function getCorrectedCol() {
return this.currentCell.getCol() + this.colOffset;
}
this.setColOffset = function setColOffset(colOffset) {
this.colOffset = colOffset;
}
this.getColOffset = function getColOffset() {
return this.colOffset;
}
this.initColOffset = function initColOffset() {
if (this.currentCell.getRow() != this.originalRow) {
this.colOffset = 0;
}
}
this.getImpactedCells = function getImpactedCells() {
return this.impactedCells;
}
this.addImpactedCell = function addImpactedCell(impactedCell) {
this.impactedCells.push(impactedCell);
}
this.addImpactedCells = function addImpactedCells() {
var currentCell = this.currentCell;
for (var i = 1; i < currentCell.getRowspan(); i++) {
var impactedRow = currentCell.getRow() + i;
this.calcOffset(impactedRow);
var impactedCol = this.getCorrectedCol();
var offset = 0;
if (currentCell.getColspan()) {
offset = currentCell.getColspan();
} else {
offset = 1;
}
this.addImpactedCell(new ImpactedCell(impactedRow, impactedCol, offset))
}
}
this.calcOffset = function calcOffset(row) {
var colOffset = this.colOffset;
var result = colOffset;
for (var i = 0; i < this.impactedCells.length; i++) {
var impactedCell = this.impactedCells[i];
if (row == impactedCell.row && this.getCorrectedCol() == impactedCell.col) {
colOffset += impactedCell.offset;
result = colOffset;
break;
}
}
this.colOffset = result;
return result;
}
this.correctColOffset = function correctColOffset() {
var currentCell = this.currentCell;
var tmpColOffset;
while (true) {
this.calcOffset(currentCell.getRow());
tmpColOffset = this.getColOffset();
this.calcOffset(currentCell.getRow());
if (this.getColOffset() == tmpColOffset) {
break;
}
}
}
this.mergeCells = function mergeCells(oSheet, row1, col1, row2, col2) {
oSheet.Range(oSheet.Cells(row1, col1), oSheet.Cells(row2, col2)).MergeCells = true;
}
this.mergeCellsConditionally = function mergeCellsConditionally(oSheet) {
var currentCell = this.currentCell;
var colsShouldMerge = currentCell.getColspan() > 1;
var rowsShouldMerge = currentCell.getRowspan() > 1;
if (colsShouldMerge && !rowsShouldMerge) {
this.mergeCells(
oSheet,
currentCell.getRow(), this.getCorrectedCol(),
currentCell.getRow(), this.getCorrectedCol()
+ currentCell.getColspan() - 1
);
} else if (!colsShouldMerge && rowsShouldMerge) {
this.mergeCells(
oSheet,
currentCell.getRow(), this.getCorrectedCol(),
currentCell.getRow() + currentCell.getRowspan() - 1, this.getCorrectedCol()
);
} else if (colsShouldMerge && rowsShouldMerge) {
this.mergeCells(
oSheet,
currentCell.getRow(), this.getCorrectedCol(),
currentCell.getRow() + currentCell.getRowspan() - 1,
this.getCorrectedCol() + currentCell.getColspan() - 1
);
}
}
}
var oXL = new ActiveXObject("Excel.Application");
var oWB = oXL.Workbooks.Add();
var oSheet = oWB.ActiveSheet;
var cellManager = new CellManager(0, 0, new Array());
traverseTable(
table,
function(i, j, cell) {
var text = cell.innerText;
if (null != text) {
var row = i + 1;
var col = j + 1;
var currentCell = new CurrentCell(row, col, text);
cellManager.setCurrentCell(currentCell);
cellManager.initColOffset();
cellManager.setOriginalRow(row);
var colspan = cell.getAttribute("colspan");
var rowspan = cell.getAttribute("rowspan");
currentCell.setColspan(colspan);
currentCell.setRowspan(rowspan);
var colsShouldMerge = currentCell.getColspan() > 1;
var rowsShouldMerge = currentCell.getRowspan() > 1;
cellManager.correctColOffset();
if (rowsShouldMerge) {
cellManager.addImpactedCells();
}
cellManager.mergeCellsConditionally(oSheet);
var cellInSheet = oSheet.Cells(currentCell.getRow(), cellManager.getCorrectedCol());
if (colsShouldMerge) {
var align = cell.getAttribute("align");
if ("center" == align) {
cellInSheet.HorizontalAlignment = 3;
}
cellManager.setColOffset(cellManager.getColOffset() + (colspan - 1));
}
cellInSheet.NumberFormatLocal = "@";
cellInSheet.value = text;
}
}
)
oXL.Visible = true;
oXL.UserControl = true;
oXL = null;
idTmr = window.setInterval("Cleanup();",1);
}
function traverseTable(table, action) {
for (var i = 0; i < table.rows.length; i++) {
var row = table.rows(i);
for (var j = 0; j < row.cells.length; j++) {
var cell = row.cells(j);
action(i, j, cell);
}
}
}
测试代码:
<!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>无标题文档</title>
<script src="util.js"></script>
</head>
<body>
<table width="200" border="1" onclick="exportAsXls(this)">
<tr>
<td colspan="4" rowspan="2">1234678t</td>
<td>5</td>
<td>k</td>
<td colspan="2">mr</td>
</tr>
<tr>
<td>9</td>
<td colspan="2" rowspan="3">wgbnpt</td>
<td>z</td>
</tr>
<tr>
<td rowspan="2">1013</td>
<td colspan="2" rowspan="3">eh14151920</td>
<td>11</td>
<td>12</td>
<td>c</td>
</tr>
<tr>
<td>16</td>
<td>17</td>
<td>a</td>
</tr>
<tr>
<td>18</td>
<td colspan="5">2122dsj</td>
</tr>
</table>
</body>
</html>
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:IT专家网面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号