請問大量匯出Excel方法 |
缺席
|
allenpower
一般會員 發表:13 回覆:13 積分:5 註冊:2007-01-06 發送簡訊給我 |
我是用ADO+DataSource+DBGrid 從MSSQL 抓取資料
但匯出到EXCEL我只能做到一欄一欄匯 所以在資料量多的時後 要花很久的時間 請問如何能改善大量匯出Excel速度 這問題我之前PO 錯到Delphi 抱歉 如下是我的程式 i=0; ADOQuery1->First(); while (i < ADOQuery1->RecordCount){ rSQL0=ADOQuery1->Fields->Fields[0]->AsInteger; rSQL1=ADOQuery1->Fields->Fields[1]->AsInteger; rSQL2=ADOQuery1->Fields->Fields[2]->AsInteger; rSQL3=ADOQuery1->Fields->Fields[3]->AsInteger; rSQL4=ADOQuery1->Fields->Fields[4]->AsInteger; rSQL5=ADOQuery1->Fields->Fields[5]->AsInteger; rSQL6=ADOQuery1->Fields->Fields[6]->AsString; rSQL7=ADOQuery1->Fields->Fields[7]->AsString; Range=Worksheet.OlePropertyGet("Cells",i 2,1); Range.OlePropertySet("Value",rSQL0); Range=Worksheet.OlePropertyGet("Cells",i 2,2); Range.OlePropertySet("Value",rSQL1); Range=Worksheet.OlePropertyGet("Cells",i 2,3); Range.OlePropertySet("Value",rSQL2); Range=Worksheet.OlePropertyGet("Cells",i 2,4); Range.OlePropertySet("Value",rSQL3); Range=Worksheet.OlePropertyGet("Cells",i 2,5); Range.OlePropertySet("Value",rSQL4); Range=Worksheet.OlePropertyGet("Cells",i 2,6); Range.OlePropertySet("Value",rSQL5); Range=Worksheet.OlePropertyGet("Cells",i 2,7); Range.OlePropertySet("Value",StringToOleStr(rSQL6)); Range=Worksheet.OlePropertyGet("Cells",i 2,8); Range.OlePropertySet("Value",StringToOleStr(rSQL7)); i=i 1; ADOQuery1->MoveBy(1); }
------
P |
hua2000
中階會員 發表:102 回覆:200 積分:65 註冊:2006-11-04 發送簡訊給我 |
|
Jasonwong
版主 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
|
allenpower
一般會員 發表:13 回覆:13 積分:5 註冊:2007-01-06 發送簡訊給我 |
|
allenpower
一般會員 發表:13 回覆:13 積分:5 註冊:2007-01-06 發送簡訊給我 |
===================引 用 allenpower 文 章=================== 我是用ADO DataSource DBGrid 從MSSQL 抓取資料 但匯出到EXCEL我只能做到一欄一欄匯 所以在資料量多的時後 要花很久的時間 請問如何能改善大量匯出Excel速度 這問題我之前PO 錯到Delphi 抱歉 如下是我的程式 i=0; ADOQuery1->First(); while (i < ADOQuery1->RecordCount){ rSQL0=ADOQuery1->Fields->Fields[0]->AsInteger; rSQL1=ADOQuery1->Fields->Fields[1]->AsInteger; rSQL2=ADOQuery1->Fields->Fields[2]->AsInteger; rSQL3=ADOQuery1->Fields->Fields[3]->AsInteger; rSQL4=ADOQuery1->Fields->Fields[4]->AsInteger; rSQL5=ADOQuery1->Fields->Fields[5]->AsInteger; rSQL6=ADOQuery1->Fields->Fields[6]->AsString; rSQL7=ADOQuery1->Fields->Fields[7]->AsString; Range=Worksheet.OlePropertyGet("Cells",i 2,1); Range.OlePropertySet("Value",rSQL0); Range=Worksheet.OlePropertyGet("Cells",i 2,2); Range.OlePropertySet("Value",rSQL1); Range=Worksheet.OlePropertyGet("Cells",i 2,3); Range.OlePropertySet("Value",rSQL2); Range=Worksheet.OlePropertyGet("Cells",i 2,4); Range.OlePropertySet("Value",rSQL3); Range=Worksheet.OlePropertyGet("Cells",i 2,5); Range.OlePropertySet("Value",rSQL4); Range=Worksheet.OlePropertyGet("Cells",i 2,6); Range.OlePropertySet("Value",rSQL5); Range=Worksheet.OlePropertyGet("Cells",i 2,7); Range.OlePropertySet("Value",StringToOleStr(rSQL6)); Range=Worksheet.OlePropertyGet("Cells",i 2,8); Range.OlePropertySet("Value",StringToOleStr(rSQL7)); i=i 1; ADOQuery1->MoveBy(1); } ? ---------- int rSQL,cSQL; String aa; Variant TotalVal; RowCount=ADOQuery1->RecordCount; TotalVal=VarArrayCreate(OPENARRAY(int),(0,RowCount-1,0,7),varVariant);//設定陣列範圍 ADOQuery1->First(); for(rSQL=0;rSQL for(cSQL=0;cSQL<8;cSQL ) { TotalVal.PutElement(ADOQuery1->Fields->Fields[cSQL]->AsString,rSQL,cSQL); } ADOQuery1->Next(); } aa="H"; aa=aa IntToStr(RowCount 1); Range=Worksheet.OlePropertyGet("Range","A2",aa.c_str());//設定excel範圍 Range.OlePropertySet("Value",TotalVal); 這是在ktop爬文 解決的 分享給各位大大 如有修正的地方請給予指教 謝謝 ktop真是讓人想哭 又感動的地方
------
P |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |