大概过程是这样的。
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读到程序堆栈空间,以后只访问堆栈。
二是冒泡换成二分查找,但是我不会弄啊。可咋整
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读到程序堆栈空间,以后只访问堆栈。
二是冒泡换成二分查找,但是我不会弄啊。可咋整
//记录批量读取
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);
}
就是先把excel文件内容读到一个数组里面对不对?
就是先把excel文件内容读到一个数组里面对不对?
对,
主要的节点输出日志, 看看都消耗了多少时间,然后再针对性的优化
就是先把excel文件内容读到一个数组里面对不对?
对,
主要的节点输出日志, 看看都消耗了多少时间,然后再针对性的优化
这段程序输出的就是Excel中一个sheet的所有行列内容,大概用了10秒。我的一个sheet是500多行128列。然后我该怎么办呢?