最近在做一个Excel数据导入的功能,想在Excel大数据量导入时给一个进度条提示,结果碰到一个郁闷的问题。在点击进行数据导入时,进度条没有办法显示,但是实际上进度条已经生成了,并且用鼠标点击页面后进度条显示出来,但是在下次鼠标点击之前数值不会动。同样,在程序运行的时候,随便敲击键盘(如:Ctrl)进度条也会显示出来,但在下次敲击之前,数值不会变动,如果你一直按住Ctrl不动,进度条可以正常运行,实在想不通什么原因,请高手指教。下面附上我的源码:operateExcel.getExcelCellList=function(filePath,sheetid,startCell,cellLength)//取得EXCEL指定工作表的指定内容:startCell:从第几行开始读取cellLength:总共读几行
{
var progressBar = Ext.MessageBox.show({ //这里定义了进度条
title:'请等待',
msg:'正在从Excel中读取数据……',
width:240,
modal:true,
progress:true,
closable:false
});
var oXL = new ActiveXObject("Excel.application");
var oWB = oXL.Workbooks.open(filePath);
oWB.worksheets(sheetid).select();
var oSheet = oWB.ActiveSheet;
if(oSheet.UsedRange.Columns.Count<=1)
{
return ;
}
var columnList = [];
for(var li_row = 1;li_row<=oSheet.UsedRange.Columns.count;li_row=li_row+1)
{
columnList[li_row-1] = oSheet.Cells(1,li_row).value;
}
try{
var cellsData = [];
var rowsCount = oSheet.UsedRange.Rows.count;
var progressCount = startCell+cellLength;
if(rowsCount<startCell+cellLength)
{
progressCount = rowsCount;
}
var percentage = 0;
for(var i=startCell;(i<(startCell+cellLength))&&(i<=rowsCount);i=i+1)
{
var recorddata = {};
percentage = (i-1)/(progressCount-1);
progressBar.updateProgress(percentage,'第'+i+'条,共'+progressCount+'条');//这里更新进度条
for(li_row = 0;li_row <columnList.length;li_row = li_row+1)
{
if((oSheet.Cells(i,li_row+1).value == undefined) || (oSheet.Cells(i,li_row+1).value =="null"))
{
recorddata[columnList[li_row]] = "";
}
else
{
recorddata[columnList[li_row]] = oSheet.Cells(i,li_row+1).value;
}
}
// var datastring = "";
// for(var key in recorddata)
// {
// datastring += key+":"+recorddata[key]+"\n";
// }
// alert(datastring);
cellsData[cellsData.length] = recorddata;
}
}catch(e)
{
alert('读取EXCE数据时出现错误!');
}
progressBar.hide();
oXL.Quit();
CollectGarbage();
return cellsData;
}
{
var progressBar = Ext.MessageBox.show({ //这里定义了进度条
title:'请等待',
msg:'正在从Excel中读取数据……',
width:240,
modal:true,
progress:true,
closable:false
});
var oXL = new ActiveXObject("Excel.application");
var oWB = oXL.Workbooks.open(filePath);
oWB.worksheets(sheetid).select();
var oSheet = oWB.ActiveSheet;
if(oSheet.UsedRange.Columns.Count<=1)
{
return ;
}
var columnList = [];
for(var li_row = 1;li_row<=oSheet.UsedRange.Columns.count;li_row=li_row+1)
{
columnList[li_row-1] = oSheet.Cells(1,li_row).value;
}
try{
var cellsData = [];
var rowsCount = oSheet.UsedRange.Rows.count;
var progressCount = startCell+cellLength;
if(rowsCount<startCell+cellLength)
{
progressCount = rowsCount;
}
var percentage = 0;
for(var i=startCell;(i<(startCell+cellLength))&&(i<=rowsCount);i=i+1)
{
var recorddata = {};
percentage = (i-1)/(progressCount-1);
progressBar.updateProgress(percentage,'第'+i+'条,共'+progressCount+'条');//这里更新进度条
for(li_row = 0;li_row <columnList.length;li_row = li_row+1)
{
if((oSheet.Cells(i,li_row+1).value == undefined) || (oSheet.Cells(i,li_row+1).value =="null"))
{
recorddata[columnList[li_row]] = "";
}
else
{
recorddata[columnList[li_row]] = oSheet.Cells(i,li_row+1).value;
}
}
// var datastring = "";
// for(var key in recorddata)
// {
// datastring += key+":"+recorddata[key]+"\n";
// }
// alert(datastring);
cellsData[cellsData.length] = recorddata;
}
}catch(e)
{
alert('读取EXCE数据时出现错误!');
}
progressBar.hide();
oXL.Quit();
CollectGarbage();
return cellsData;
}
解决方案 »
- 在JSON-RPC for Java框架下的JSON问题!!!
- 新手集成SSH,查询时警告no persistent classes...
- 如何从response里读取上次访问页面时存入的cookies??
- 问个ftp的问题
- jfreechart 例子中的TimeSeriesDemo1 实时曲线中日期出现乱码
- JSF中如何动态生成选项卡?
- 为什么总是报OutOfMemoryError?
- 多用户大文件下载Struts2 stream hode不住了,在线求解!!!
- 求助ssh框架cxf的配置问题
- 跨web传值
- JSP想编写一个试卷生成器,动态添加控件不能相应
- 求!!!JAVA项目开发全程实录 整套电子书
进度条 真没用过 ~