大概过程是这样的。
Excel文件A和B里面都存了几个sheet的参数,参数行最多500多行。1程序从界面读进来参数m.n两个数值。
2打开AB两个文件.
3根据m的值找到对应A中的参数和B中对应的sheet.
4.用n和A中的参数计算出O
5.用O在B的sheet中找到差值最小的数值的序号。这个过程大概要4秒执行完。崩溃啊太慢了。
我跑了一下大概打开文件时候会顿一下,然后就是查找的时候会慢。
第5步,找最小差值。Excel中的数值是按大小顺序排列的。按说二分查找速度最快。但是我用的冒泡,我该怎么办呢?我想到一是一次性把excel读到程序堆栈空间,以后只访问堆栈。
二是冒泡换成二分查找,但是我不会弄啊。可咋整

解决方案 »

  1.   

    COleSafeArray 试试批量读取
        //记录批量读取
        try
        {
          RangePtr pRange = pSheet->UsedRange;      COleSafeArray sa;
          sa.Attach(pRange->Value2);      try 
          {
            //Determine upper bounds for both dimensions
            long lNumRows, lNumCols;
            sa.GetUBound(1, &lNumRows);
            sa.GetUBound(2, &lNumCols);        //Determine lower bounds for both dimensions
            long lowRow, lowCol;
            sa.GetLBound(1, &lowRow);
            sa.GetLBound(2, &lowCol);        for(long r = lowRow; r <= lNumRows; r++ )
            {
              for(long c = lowCol; c <= lNumCols; c++ )
              {
                long index[] = {r, c};
                
                //retrieve each element of the safearray
                _variant_t val;
                sa.GetElement(index, &val);
                
                val.ChangeType(VT_BSTR);
                TCHAR szDbgOut[1024];
                _stprintf_s(szDbgOut, _T("r%d,c%d=[%s]\r\n"), r, c,
                  (LPCTSTR)_bstr_t(val.bstrVal));
                OutputDebugString(szDbgOut);
              }
            }
          }
          catch (COleException *pEx)
          {
            AfxThrowOleDispatchException(1003, 
              _T("Unexpected Failure in FastSort method"));
            pEx->Delete();
          }      sa.Detach();    }
        catch(_com_error &e) 
        {
          dump_com_error(e);
        }
        
      

  2.   


    就是先把excel文件内容读到一个数组里面对不对?
      

  3.   


    就是先把excel文件内容读到一个数组里面对不对?
    对, 
    主要的节点输出日志, 看看都消耗了多少时间,然后再针对性的优化
      

  4.   


    就是先把excel文件内容读到一个数组里面对不对?
    对, 
    主要的节点输出日志, 看看都消耗了多少时间,然后再针对性的优化
    这段程序输出的就是Excel中一个sheet的所有行列内容,大概用了10秒。我的一个sheet是500多行128列。然后我该怎么办呢?
      

  5.   

    表里面没有公式的话可以用ODBC+SQL……如果同一个文件查很多次的话也可以临时把数据倒到Access数据库然后在对应字段加索引。
      

  6.   

    是读取excel慢 还是查找慢?你是怎么读excel的