请问大家,我已经把数据库中得数据查询出来放在了我的一个jsp页面的表格中了.现在我要点击一个按钮"导出表格内容到excel中",就能把这个表格中得内容导出到excel里面!!如何实现啊?希望能有代码讲解!!谢谢!万分感谢!~
解决方案 »
- struts标签 int 效验问题,求大神帮忙解答!
- SSH架构增删改查奇怪问题
- 搜索引擎怎么过滤掉网页的版权信息
- jsp中如何实现分页显示
- struts2配置文件的result,跳转到其它命名空间里的action,怎么写
- 这是我对Hibernate中inverse属性的理解,不知道,对不对~
- JBuilder2006断点调试问题(新手上路请指点)
- 有一个自增长的列被配置后,发布时出现警告,程序没有受到影响
- 哪位大侠能给我一个简单的连接ORACLE的WEBSERVICE 的例子?
- j2ee搞的我好郁闷
- blob类型数据在jsp页面的显示
- 请教高手,myeclipse上的项目有个大红X,怎么解决
/**
* 生成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调用
* @param {Object} 表格对象
* @param {Array} 数组retArr, retArr[0], 行数;retArr[1], 列数
*/
function getTableRowsCols(objTable){
var rowCnt = 0, colCnt = 0;
for (var i = 0; i < objTable.rows.length; i++) {
var row = objTable.rows[i]; //当前行
var rowRows = 1, rowCols = 0; //当前行的初始行数和列数
for (var j = 0; j < row.cells.length; j++) {
var cell = row.cells[j]; //当前单元格
if (cell.firstChild != null && cell.firstChild.tagName == "TABLE") {
var inRetArr = getTableRowsCols(cell.firstChild);
rowCols += inRetArr[1];
rowRows = rowRows < inRetArr[0] ? inRetArr[0] : rowRows;
}
else { //不是表格
rowCols += parseInt(cell.colSpan);
rowRows = rowRows < parseInt(cell.rowSpan) ? parseInt(cell.rowSpan) : rowRows;
}
}
colCnt = colCnt < rowCols ? rowCols : colCnt;
rowCnt += rowRows;
}
var retArr = new Array();
retArr[0] = rowCnt;
retArr[1] = colCnt;
return retArr;
}/**
* 导出表格
* 被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.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;
}
}用的时候这样使用
<form name="resultForm" >
<table id="resultTable">
.......
</table>
</form>
<input type="button" value="导出excel" onclick="exportexcel('resultForm','resultTable');" />要注意的地方
1.客户的机器要装有ms excel ,wps的不行
2.将此站点加入安全站点
还有就是我试了,但是只会跳转到本页面啊!
数据不会显示到excel中,不能启动excel啊!
还有就是是不是只能在IE上用啊?我用的firefox!那个form是不是不用action啊!
能说哈那个<form>具体的内容不啊!
<form name="resultForm" method="post" action="">
<label> <br>
</label>
<table width="729" height="457" border="1" id="resultTable">
<tr>
<td>1</td>
<td>5</td>
</tr>
<tr>
<td>2</td>
<td>6</td>
</tr>
<tr>
<td>3</td>
<td>7</td>
</tr>
<tr>
<td>4</td>
<td>8</td>
</tr>
</table>
<label><br>
<input type="submit" name="Submit" value="导出excel" onClick="exportexcel('resultForm','resultTable')">
</label>
</form>
这是我写的测试,js就用的上面你给的!但是不行啊!!
在线等!!!
<input type="button" value="导出excel" onclick="exportexcel('resultForm','resultTable');" />