ADO元件讀取多sheets之excel(xls)的問題 |
尚未結案
|
甘蔗夫
一般會員 發表:76 回覆:19 積分:19 註冊:2004-08-25 發送簡訊給我 |
Dear 大大,.
我附上我部分程式,我用ADO元件在讀取多sheets之excel(xls),偶爾會發生下列情形: (1)讀到最大行數與實際最大行數有差異 For example(通常發生在第二個sheet之後): 1 2 3 4 5 6 7 8 9 a = >最大行數應該是4行,但偶爾讀取的最大行數會多於4行 (2)偶爾會在下面函數void __fastcall TForm1::GetColRow(String Path)之程序ADOQ->Open(); 發展錯誤,我在程序加了goto repeat;的動作,似乎暫時解決我的困擾,但我覺得不是很好的solution ,請問各位大大,是否有適當的solution void __fastcall TForm1::GetSheetName(String Path) { // Set related parameters in a *.xls file Variant ExcelApp, ExcelBooks, ExcelBook, ExcelSheets, ExcelSheet, ExcelCell; Variant SheetCount,CellValue; try { ExcelApp=Variant::CreateObject("Excel.Application"); Application->ProcessMessages(); } catch(Exception &e) { ShowMessage(e.Message); Application->ProcessMessages(); } if(ExcelApp.IsEmpty()) return; ExcelBooks=ExcelApp.OlePropertyGet("Workbooks"); try { ExcelBook = ExcelBooks.OleFunction("Open",Path.c_str()); Application->ProcessMessages(); } catch(Exception &e) { ShowMessage(e.Message); Application->ProcessMessages(); } if(ExcelBook.IsEmpty()) return; ExcelSheets=ExcelBook.OlePropertyGet("Sheets"); SheetCount= ExcelSheets.OlePropertyGet("Count"); SheetCNT=SheetCount; for(int i = 0; i < SheetCount ; i ) { ExcelSheet = ExcelSheets.OlePropertyGet("Item", i 1); SheetName->Add(ExcelSheet.OlePropertyGet("Name")); Application->ProcessMessages(); } ExcelBook.OleFunction("Close",StringToOleStr(Path)); ExcelApp.OleFunction("Quit"); } void __fastcall TForm1::GetColRow(String Path) { AnsiString S; if(RowXls) delete RowXls; if(ColXls) delete ColXls; RowXls = new int[SheetCNT]; ColXls = new int[SheetCNT]; repeat: for(int i = 0; i < SheetCNT ; i ) { String a=SheetName->Strings[i]; // Seting ADO Object ADOQ->Active = false; ADOC->Connected = false; // Set Connection Method S = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Path ";\ Extended Properties=Excel 8.0;Persist Security Info=False"; ADOC->Provider = "Microsoft.Jet.OLEDB.4.0"; ADOC->ConnectionString = S; // Active ADOConnection ADOC->Connected = true; // 連結並且Select 的worksheet內所有資料 ADOQ->Connection = ADOC; ADOQ->Close(); ADOQ->SQL->Clear(); ADOQ->SQL->Add("select * from [" SheetName->Strings[i] "$]"); try { ADOQ->Open(); Application->ProcessMessages(); } catch(...) { ADOC->Close(); ADOQ->Close(); Application->ProcessMessages(); goto repeat; } try { ADOQ->Active = true; Application->ProcessMessages(); } catch(...) { ADOQ->Active = false; ADOC->Connected = false; Application->ProcessMessages(); } // 取得Record 筆數 RowXls[i] = ADOQ->RecordCount; // 行 // 取得Field 個數 ColXls[i] = ADOQ->FieldCount; // 列(欄位) ADOC->Close(); ADOQ->Close(); Application->ProcessMessages(); } } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |