JS表格导出excel,无效的指针!

gaofei871128 2011-10-07 03:46:43
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可见属性
}
提示“无效的指针”
请教一下是什么问题那?在网上也查不到,谁能帮帮我那?
...全文
306 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
淡定的峰哥 2011-10-07
  • 打赏
  • 举报
回复
我告诉你一种js导出表格到excel中
表格用form标签套住

/**
* 生成Excel文件并保存
* @param {String} 要生成的数据所在的表单名称
* @param {String} 要生成的数据所在的table名称
*/
function exportexcel(formName,tableName){
var oXL = new ActiveXObject("Excel.Application");
oXL.Visible = true;
var oWB = oXL.Workbooks.Add();
var oSheet = oWB.ActiveSheet;

var div1=document.all.item(formName);
var table1=div1.all.item(tableName);
var table=new Array();

var retArr = getTableRowsCols(table1);
var rlen=retArr[0];
var clen=retArr[1];

var flagTable=new Array(rlen);
for(var i=0;i<rlen;i++){
flagTable[i]=new Array(clen);
for(var j=0;j<clen;j++){
flagTable[i][j]=0;
}
}

var rowBegin=1, colBegin=1; //导出的表格的起始位置

var c1=oSheet.Cells(rowBegin,colBegin);
var c2=oSheet.Cells(rlen+rowBegin-1,clen+colBegin-1);
oSheet.Range(c1,c2).VerticalAlignment = -4108;
oSheet.Range(c1,c2).HorizontalAlignment = -4108;

exportTable(oSheet, flagTable, table1, rowBegin, colBegin);

oSheet.Range(oSheet.Cells(rowBegin,colBegin),oSheet.Cells(rlen+rowBegin-1,clen+colBegin-1)).EntireColumn.AutoFit();
oXL.UserControl = true;
oXL.Quit();
}

/**
* 导出表格
* 被exportexcel调用
*/
function exportTable(oSheet, flagTable, objTable, rowBegin, colBegin){
var flagRow=0, flagCol=0; //跟踪当前的表示表中的相对位置
for(var i=0; i<objTable.rows.length; i++) {
var row = objTable.rows[i]; //当前行
flagCol = 0;
var subTableRows = 1; //当前行若有表格,则记录其中最大的行数
for (var j=0; j<row.cells.length; j++) {
while (flagTable[rowBegin-1+flagRow][colBegin-1+flagCol]==1) {
flagCol++;
}
var cell=row.cells[j]; //当前单元格
if (cell.firstChild !=null && cell.firstChild.tagName == "TABLE") {
var retArrRows = getTableRowsCols(cell.firstChild)[0];
subTableRows = subTableRows<retArrRows ? retArrRows : subTableRows;
exportTable(oSheet, flagTable, cell.firstChild, rowBegin+flagRow, colBegin+flagCol);
} else {

oSheet.Cells(rowBegin+flagRow, colBegin+flagCol).Font.Bold=1;

var rs=parseInt(cell.rowSpan);
var cs=parseInt(cell.colSpan);
oSheet.Cells(rowBegin+flagRow, colBegin+flagCol).NumberFormatLocal="@";
// oSheet.Cells(rowBegin+flagRow, colBegin+flagCol).Value = cell.innerText;
oSheet.Cells(rowBegin+flagRow, colBegin+flagCol).Value = getObjInnerText(cell);
oSheet.Range(oSheet.Cells(rowBegin+flagRow, colBegin+flagCol),oSheet.Cells(rowBegin+flagRow+rs-1,colBegin+flagCol+cs-1)).MergeCells = 1;

//填写当前单元格在标志表格中的标志
for(var k=0; k<rs; k++) {
for(var l=0; l<cs; l++) {
flagTable[rowBegin-1+flagRow+k][colBegin-1+flagCol+l]=1;
}
}
}

flagCol =flagCol + cs - 1;//加速标志表格的列的移动,因为当前表格已经标识了cs个标志单元
}
flagRow += subTableRows;
}
}

gaofei871128 2011-10-07
  • 打赏
  • 举报
回复
顶啊!大侠来救我啊!

50,544

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧