Excel Bearbeitung
-
Hallo,
ActiveWorkBook.Ole..... kennt er nicht
Excel.OleProcedure... (Fehler: Unbekannter Name)
als auch
vSheet.OleProcedure.... (Fehler: Falscher Variablentyp)es kann normal nicht viel sein. aber was ????
mfg
Traugott
-
Das hatte ich jetzt bloß von dir übernommen. Dann etwa so
Excel.OlePropertyGet("Workbooks",0).OleProcedure("SaveAs",(Variant) FileName);
-
das hier funktioniert:
ActiveWorkBook.OleFunction("SaveAs", "c:\\temp\\Test.xls");
bitte darauf achten nicht einer Variablen unterschiedliche Werte zuzuweisen, in deinem Beispiel bekommt "Excel" erst die Zuweisung der Application und dann wird diese durch die Zuweisung des Workbook überschrieben, eigentlich brauchst du das original aber noch zum Schließen und Unassigned. Während du das vSheet in der falschen Reihenfolge aufbaust, da erst der Zugriff auf alle Worksheets erfolgen sollte und dann der Zugriff auf ein bestimmtes Worksheet.
Deshalb mein Tipp: schau dir nochmals genau den von mir genannten FAQ-Beitrag an und geh das Beispiel einfach mal in einem neuen Projekt durch. In dem Beispiel ist auch die Zuweisung der einzelnen Excel-Elemente und die Reihenfolge dargestellt und es funktioniert einschließlich Speichern...
[Edit] noch ein Hinweis: die Zeile 3 in deinem Quellcode ist völlig sinnfrei, da hier keinerlei Zuweisung oder Wertänderung erfolgt
-
Als Alternative könnte man auch die im FaQ-Beitrag
Excel - Beispiel und Wrapperklasse für Excelautomation
beschriebene Klasse verwenden. Da spart man sich das Hantieren mit den Ole-Funktionen ganz.
-
Hallo,
ich habe ein neues Projekt begonnen, um dies zu testen.
Komme ich in die For-Schleife zum Auslesen der Datenbank, bekomme ich die Debugger Exeption: Falscher Variablentyp !!Was heißt das, oder was muss ich tun ??
Meine For-Schleife:
int Zahl;
Zahl = Form1->Query1->Fields->Count;
int Satz;
Satz = Form1->Query1->RecordCount;for (int iRow=0; iRow < Satz; iRow++)
{
for (int iCol = 0; iCol < Zahl; iCol++)
{
Variant Range = WorkSheet.OlePropertyGet("Cells", iRow+1, iCol+1); // 1.Zeile / 1.Spalte
Range.OlePropertyGet("Item", Form1->Query1->Fields->Fields[iCol]->AsString);}
Form1->Query1->Next();mfg
Traugott
-
1. bitte benutz die Code-Tags
2. willst du die Daten in Excel reinschreiben oder daraus lesen?
-> Range.OlePropertyGet gibt etwas
-> Range.OlePropertySet setzt etwas
3. wie kommst du auf "Item"?
4. der Fehler kommt durch die Übergabe des Strings, hier mußt du char übergeben -> siehe c_str()
-
Hallo,
beim auslesen der Daten in Query->Fields->Fields[iCol]->AsString kommt der Variablentyp Fehler.
Da meine Datenbank verschiedene Feldtypen aufweist ist iCol mal Integer und mal String. Gibt es hier eine universalFormel oder wie kann ich das regeln ????Rest funktioniert.
mfg
Traugott
-
Hallo,
In TField::DataType steht der Typ drin. Wenn du den also nicht vorher weißt mache damit ein switch.
-
Hallo,
habe ein switch gemacht.
Boolean, DateTime und Integer liest er aus nur meine String Werte nicht.Warum nicht ???????
Query1->First(); for (int iRow=0; iRow <= Query1->RecordCount; iRow++) { for (int iCol = 0; iCol < Query1->Fields->Count; iCol++) { Variant Range = WorkSheet.OlePropertyGet("Cells", iRow+1, iCol+1); // 1.Zeile / 1.Spalte switch (iCol) { case 0: case 14: case 15: case 16: case 30: case 31: //case 149: //case 150: { Range.OlePropertySet("Value", Query1->Fields->Fields[iCol]->AsInteger); break; } case 11: case 23: case 24: case 149: case 151: { Range.OlePropertySet("Value", Query1->Fields->Fields[iCol]->AsDateTime); break; } case 139: case 140: case 141: case 142: case 143: case 144: case 145: case 146: case 147: case 160: case 161: case 162: case 163: case 164: { Range.OlePropertySet("Value", Query1->Fields->Fields[iCol]->AsBoolean); break; } default: { Range.OlePropertySet("Value", Query1->Fields->Fields[iCol]->AsString); break; } } //Range.OlePropertySet("Value", Query1->Fields->Fields[iCol]->AsVariant); } Query1->Next(); } ActiveWorkBook.OleFunction("SaveAs", "D:\\Temp\\QueryResult.xls"); } catch(...) { } //Excel.OleFunction("Quit"); Excel = Unassigned;
mfg
Traugott/Edit Bitte beachten : sfds
-
Linnea schrieb:
4. der Fehler kommt durch die Übergabe des Strings, hier mußt du char übergeben -> siehe c_str()
ich glaube Braunstein meinte nicht einen switch über die Spalten, sondern über den Datentyp der Feldwerte
-
Genau das meinte ich.
-
Hallo,
mit dem Char geht es. (schwere Geburt)
Was Kollege Braunstein allerdings mit dem switch über den Datentyp der Feldwerte meint wäre intesressant zu wissen.mfg
traugott
-
Hallo,
hab ja ganz vergessen mich ganz herzlich zu bedanken.
Nochmals Vielen Dank !!!!!mfg
Traugott
-
Funktionieren diese ganzen Ole-Methoden auch für Openoffice Calc?
Und was ist eigentlich Query1?
-
@Traugott
schau dir mal das Beispiel "ParamCount, DataType, StrToIntDef, AsXXX (Beispiel)" in der BCB-Hilfe an, dort wird switch über den DataType verwendet
-
Tobi3000 schrieb:
Und was ist eigentlich Query1?
Der Quelltext stammt doch von dir. Du solltest schon selber wissen wo das herkommt.
Du hast wohl ein TQuery-Objekt auf deine Form platziert.
-
Das ist so nicht richtig.
Ich will verstehen, wie dieses exportieren nach Excel funktioniert und hab im FAQ das eine Beispiel gefunden.
Auch in diesem Thread ist recht detailiert erklärt wie das funktioniert.Nur ich hab in den Beispielen nie verstanden, was Query1 ist. ~~
-
dann tipp das Wort im BCB mal ein und drück F1, oder schau in der BCB-Hilfe nach TQuery
-
Hallo,
nach meinem langen Hin und Her funktioniert ja jetzt mein Export.
Beim Formatieren hätte ich noch eine Frage:die Druckvorschau rufe ich wie folgt auf:
WorkSheet.OleFunction("PrintPreview");funktioniert.
alle Spalten auf automatische Breite stellen (AutoFit) hab ich mein Problem:
in Excel selbst gehts so: Format, Autoformat, Optionen, Breite/Höhe, OK
habs mitWorkSheet.OleFunction("Columns"), OlePropertySet("AutoFit", true);
versucht, will er nichtWorkSheet.OlePropertyGet("Columns", "A"), OlePropertySet("AutoFit", true);
will er auch nichtin der Borland Hilfe findet man nichts, im Internet ists auch recht schwierig.
wer kann mir mit meinem Problem helfen ????mfg
Traugott
-
tja, man muß halt nur wissen nach was man sucht und sollte russische oder asiatische Seiten nicht ignorieren, da der Quellcode immer in Englich ist...
versuch mal folgendes:
ExcelColumns=UsedRange.OlePropertyGet("Columns"); ColumnsCount=ExcelColumns.OlePropertyGet("Count"); for(int i=0; i<ColumnsCount; i++) { Variant Column; Variant EntireColumn; Column = ExcelColumns.OlePropertyGet("Item", i+1); EntireColumn = Column.OlePropertyGet("EntireColumn"); EntireColumn.OleFunction("Autofit"); //oder //EntireColumn.OlePropertySet("optimalWidth", true); }