Excel und OLE
-
Hallo Leute!!
Ich habe folgendes Problem!!
Ich will den Inhalt einer Excel Datei in StringGrid einlesen. StringGrid soll sich automatisch auf die Anzahl der Zeilen und Spalten einstellen. Das funktioniert auch soweit, bloß es werden nur 23 Zeilen eingelesen und eingestellt, obwohl ich in meiner Excel Datei knappe 1000 Zeilen habe!!!if (OpenDialog_old->Execute()) { MSExcel = CreateOleObject("Excel.Application"); XLWBooks = MSExcel.OlePropertyGet("Workbooks"); XLWBooks.OleProcedure("Open", OpenDialog_old->FileName.c_str()); XLWBook = XLWBooks.OlePropertyGet("Item", 1).OlePropertyGet("Worksheets").OlePropertyGet("Item", 1); XLWBooks = XLWBook.OlePropertyGet("Range", "A1:CV100").OlePropertyGet("Value"); row_last = MSExcel.OlePropertyGet("ActiveCell").OlePropertyGet("Row"); col_last = MSExcel.OlePropertyGet("ActiveCell").OlePropertyGet("Column"); old_list->RowCount = row_last; old_list->ColCount = col_last; for (int i=1; i <= row_last; i++) { for (int j=1; j <= col_last; j++) { old_list->Cells[j-1][i-1] = XLWBooks.GetElement(i, j); } } MSExcel.OlePropertySet("DisplayAlerts",false); MSExcel.OleProcedure("Quit"); }Kann mir jemand helfen??
Gruß Swunder
-
diese Ziele beinhaltet aber nur 100 Zeilen:
XLWBooks = XLWBook.OlePropertyGet("Range", "A1:CV[b]100[/b]").OlePropertyGet("Value");außerdem solltest du mal mit dem Debugger kontrollieren was bei row_last und col_last drinsteht, OlePropertyGet("ActiveCell") gibt nämlich nicht die letzte Zelle zurück, sondern die aktive, d.h. die Zelle die beim letzten Speichern markiert war
[Edit] schau dir mal "Excel - Beispiel und Wrapperklasse für Excelautomation" an, dort wird unter anderem auch der RowCount und ColCount ausgelesen
-
Ich würde einfach eine Schleife machen in der Du die Spalte A z.B. solange durchläufst, bis Du z.B. 5 aufeinanderfolgende Leerzellen gefunden hast und dann abbrechen.
Das ganze dann zählen und dann weißte wie viele Datenzeilen Du hast.
Bist dann deutlich flexibler.Einziger Nachteil ist halt, dass Du Dir ne "Grenze" setzen musst, wann die Tabelle zu ende ist... in meinem Beispiel die 5.