关于while循环和for循环的优化
如题:有一段代码如下:
while(i<=nRow)
{
AnsiString Text = "";
for(int k = 0 ; k < nCol ; k++)
{
value[k] = WorkSheet1.OlePropertyGet("Cells", i, k+1).OlePropertyGet("Value");
}
for(int j=0;j<num;j++)
{
value[Index[j]-1] = value[Index[j]-1] + DateDelimt;
Text += value[Index[j]-1];
}
ReadList->Add(Text);
i++;
}
用途是将一个excel表格中的指定的列提取出来放到ReadList中
当i小于这个表格的行数的时候进入while循环
然后将每一行的所有值获取出来,用的for循环
然后再来一个for循环,将这一行的指定的列的值一一加入Text字符串
然后再将Text字符串加入ReadList中
但是这个程序在运行过程中特别慢,一个表格中有上万行的数据,循环起来很吃力,感觉这个循环可以优化,但是自己能力有限,还请各路神人指点指点~~
[解决办法]
ole处理ExceL表本身就慢,上万行的数据更不用说了,只能等吧
[解决办法]
OLE本身就慢,没办法,不是循环的问题
[解决办法]
用数据库方式打开就快多了!
//---------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ADOQuery1->ConnectionString = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =aaa.xls;Extended Properties=Excel 8.0";
String sql="SELECT * FROM [Sheet1$]";
ADOQuery1->SQL->Add(sql);
ADOQuery1->Open() ;
}
//---------------------------------------