最近在做一个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;
}

解决方案 »

  1.   

    ext 在提交大量数据时 默认有个等待图标
    进度条 真没用过 ~
      

  2.   

    现在其实还没有进行提交操作,只是涉及到从Excel文件中把数据读出来的操作,我试了,不进行Excel读取操作的时候,只是用网上的例子做一个进度条,就可以成功的,一放到我的这段代码中进度条就不行了,会不会需要什么多线程操作之类的,怀疑应该是循环量太大的时候,系统来不及反映还是咋滴,搞不清楚啊