导出页面表中数据到Excel中
项目中遇到了一个这样的问题,业务处理大概是这样的,根据需求在页面选择相应字段(数据库中的列),然后点击生成数据,会将选择的字段生成一个表(有分页),然后点击导出数据,将这个表中的数据导入Excel中去,如果选择的字段比较少,并且数据只有几千条的话,导出数据是没问题的,但是如果选择的字段很多,并且生成的数据有几万以上的话,有时候不能导出数据程序就终止了,或者速度很慢,我弄了好久还是不明白,应该怎样解决?请各位指导一下!我用的Sql Server 2008 R2,大概代码如下:
//导出按钮
$("#btnExportToExcel").click(function () {
$("#spanConfirmContent").text("确定导出到Excel吗?");
//弹出设置对话框
$("#dialog-confirm").dialog({
resizable: false,
height: 150,
width: 200,
modal: true,
title: '自定义导出',
buttons: {
"确定": function () {
ExportToExcel(TableSql,500);
$(this).dialog("close");
},
"取消": function () {
$(this).dialog("close");
}
}
});
function ExportToExcel(TableSql, Number1Time) {
var FileName = Crowd + GetNowString();
myAlertMessage("正在导出数据...",false);
var ExportNumber = RecordCount; //生成队列用的记录数量
var ExportNumberInFact = 0; //实际导出记录数量
var Number1TimeInFact = 0; //每次导出数量
var SpareNumber = RecordCount % Number1Time;//最后的剩余记录数
ExportNumber -= SpareNumber;
Number1TimeInFact = SpareNumber;
while (ExportNumber >= 0) {
Number1TimeInFact = Number1Time;
$(document).queue("ajaxRequests", function (i, j, k) {
ExportNumber += Number1Time;
$.ajax({
url: 'Handler/ExportToExcel.aspx', //?sqlString=' + encodeURI(TableSql) + '&ExportNumber=' + Number1TimeInFact + '&ExportStart=' + (ExportNumber + 1).toString(),
//async:false,
//start: ExportNumber += Number1Time,
data: "sqlString=" + encodeURI(TableSql) + "&ExportNumber=" + Number1TimeInFact + "&ExportStart=" + (ExportNumber + 1).toString() + "&FileName=" + encodeURI(FileName),
success: function (data) {
ExportNumberInFact += Number1Time;
$("#spanAlertMessage").text("正在导出数据...(" + ExportNumberInFact.toString() + "/" + RecordCount + ")")
AjaxWait = false;
if (ExportNumberInFact >= RecordCount) {
$("#dialog-modal").dialog("close");
$("#LinkExcelName").text(FileName)
$("#LinkExcelName").attr("href", data);
}
$(document).dequeue("ajaxRequests");
}
});
});
// $(document).dequeue("ajaxRequests");
ExportNumber -= Number1Time;
}
$(document).dequeue("ajaxRequests");
} //导出Excel
excel sql?server
[解决办法]
可以导出到同一个Excel的不同sheet中吧