一,导出excel大致分为两种一种是通过纯前端代码导出,一种是通过后台的api接口导出
两者对比的适合场景:
使用纯前端代码导出excel,
**优点:**适用于只导出当前界面展示的数据,还支持一个方法全系统调用,通用性好,比如报表数据,是用来展示给用户看的,所以可以直接用纯前端代码导出,
**缺点:**不利于扩展,只能导出界面上展示的哪个列,跟数据,还不能改
通过后台的api接口
**优点:**有利于扩展,导出的数据都是根据sql去数据库中查询得到的,直接用easypoi里面提供的导出excel方法,特别方便,一行实现代码导出
**缺点:**使用easypoi里面提供的导出excel方法的缺点好像就是依赖实体,如果你的sql中存在多张表的数据,又没有这样的一个实体存储,好像是不能导出的,所以只能新建一个实体,用来存储sql查询出来的值,所以是比较麻烦的
这是只讲使用纯前端代码导出excel
原理: 其实原理很简单,就是将前端展示的值使用table标签装起来,使用js编写一个方法,打开一个excel,然后新建一个sheet,将table里面的内容移动到excel里面去
function initTable(tableId){
$("body").append("<div class='tableDiv' style='display:none'><a id='dlink' href='' style='display: none;'></a><table id='tableExcel' width='100%'></table></div>")
//获取头文件
$("#"+tableId).find("thead").find("tr").each(function(){
var _tr = $(this);
$("#tableExcel").append("<tr></tr>");
_tr.find("th").each(function(){
var _th = $(this);
var colspan = _th.attr("colspan");
var rowspan = _th.attr("rowspan");
$("#tableExcel tr:last").append("<td align='left' bgcolor='#a7c4de' colspan='"+(colspan==null||colspan==""?1:colspan)+
"' rowspan='"+(rowspan==null||rowspan==""?1:rowspan)+"'>"+getTdInfo(_th)+"</td>");
});
});
//获取数值部分
$("#"+tableId).find("tbody").find("tr").each(function(){
var _tr = $(this);
$("#tableExcel").append("<tr></tr>");
_tr.find("td").each(function(){
var _td = $(this);
var colspan = _td.attr("colspan");
var rowspan = _td.attr("rowspan");
$("#tableExcel tr:last").append("<td align='left' colspan='"+(colspan==null||colspan==""?1:colspan)+
"' rowspan='"+(rowspan==null||rowspan==""?1:rowspan)+"'>"+getTdInfo(_td)+"</td>");
});
});
}
function exportExcel(tableid,name,filename) {
initTable(tableid); //初始化一个table模板
if(getExplorer()=='ie') {
var curTbl = document.getElementById("tableExcel");
var oXL = new ActiveXObject("Excel.Application");
var oWB = oXL.Workbooks.Add();
var xlsheet = oWB.Worksheets(1);
var sel = document.body.createTextRange();
sel.moveToElementText(curTbl);
sel.select();
sel.execCommand("Copy");
xlsheet.Paste();
oXL.Visible = true;
try {
var fname = oXL.Application.GetSaveAsFilename(filename, "Excel Spreadsheets (*.xls), *.xls");
} catch (e) {
print("Nested catch caught " + e);
} finally {
oWB.SaveAs(fname);
oWB.Close(savechanges = false);
oXL.Quit();
oXL = null;
idTmr = window.setInterval("Cleanup();", 1);
}
} else {
tableToExcel("tableExcel",name,filename)
}
$(".tableDiv").remove();
}
希望我这两件事可以坚持到底 1,写博客 2,健身