daten aus c++ an excel
-
MAhlzeit!
Ich möchte aus c++ heraus excel steuern.
als erstes ein neues Workbook....mit einem Worksheet.bin im moment so weit funkt. aber noch nicht :
Variant V = Variant::CreateObject("Excel.Application"); V.OlePropertySet("Visible", true); // "Sichtbar" == "Visible" ShowMessage("Excel gestartet"); V.OleFunction("Set newSheet = ActiveWorkbook.Workbooks.Add"); // Error: unbekannter name V.OleFunction("newSheet.Name = 'current Budget'"); V.OleFunction("Quit"); // "Beenden" == "Quit" V = Unassigned;
Wo finde ich denn etwas präziser wie man die einzelnen Befehle an Excel weiter gibt...gibts da was schönes im netz???
Ich weiß googlen hilft aber insidertips sind besser
-
Hallo,
sieh dir mal diesen FAQ-Beitrag an. Vielleicht wirds dadurch klarer. Andererseits kann man diese Klassen auch gleich verwenden. Ich nehme sie selber (leicht verändert und erweitert).
-
hilft mir leider nicht!
Ich verstehe den Unterschied zwischen property und function auch noch nicht so wirklich!!!kann das mal bitte jemand kurz erklären???
bin jetzt soweit und möchte dem geöffneten sheet einen namen geben auch da wäre hilfe nett!
Variant Excel; Excel = Variant::CreateObject("Excel.Application"); Excel.OlePropertyGet("ActiveWorkBook"); Excel.OlePropertyGet("WorkBooks").OleFunction("Add"); // Sichbar machen Excel.OlePropertySet("Visible",true); Variant Sheet; Sheet=Excel.OlePropertyGet("ActiveSheet");
edit:Ach ja und zb mal irgendwelche daten da reinschreiben...
-
need still help! plz
-
schau mal in die FAQ, da gibt es noch einen Beitrag zu Excel - Daten nach Excel exportieren
-
Hast du den von mir angegebenen FAQ-Beitrag mal verwendet? Damit geht es nämlich ganz einfach.
Was Properties und Functions sind, sagt doch schon der Name. Wobei Properies so etwas ähnliches wie Klassen in C++ sind.
-
ich habe jetzt ein beisbiel von der seite bcb-box.de...das hat geholfen...
sieht jetzt so aus:Vielen Dank
Variant MyEx; Variant MyWB; Variant MyWS; // Excel starten MyEx = CreateOleObject( "Excel.Application" ); // Excel sichtbar machen MyEx.OlePropertySet( "Visible" , true ); // Zugriff auf die Workbooks MyWB = MyEx.OlePropertyGet( "Workbooks" ); // Neues Workbook erstellen MyWB.OleFunction("Add"); // Zugriff auf das erste Worksheet MyWS = MyWB.OlePropertyGet( "Item" , 1 ); MyWB = MyWS.OlePropertyGet( "Worksheets" ); // Dem Worksheet einen Namen geben MyWB.OlePropertyGet( "Item" , 1 ).OlePropertySet( "Name", "Daten" ); // Zugriff auf das erste Worksheet MyWS = MyWB.OlePropertyGet( "Item" , 1 ); // Werte in die Zellen eintragen // Überschrift // Font nur für Zelle einstellen MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 1,1 ). OlePropertyGet("Font").OlePropertySet( "Bold" , true ); MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 1,1 ). OlePropertyGet("Font").OlePropertySet( "Color" , clGreen ); MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 1,1 ). OlePropertySet( "Value" , "Datenerfassung" ); // Überschriften MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 3,1 ). OlePropertyGet("Font").OlePropertySet( "Bold" , true ); MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 3,1 ). OlePropertySet( "Value" , "Datum" ); MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 3,2 ). OlePropertyGet("Font").OlePropertySet( "Bold" , true ); MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 3,2 ). OlePropertySet( "Value" , "Uhrzeit" ); MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 3,3 ). OlePropertyGet("Font").OlePropertySet( "Bold" , true ); MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 3,3 ). OlePropertySet( "Value" , "Messwert" ); for(int i = 5; i < 15; i++) { MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", i , 1). OlePropertySet("Value", 4564); MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", i , 2). OlePropertySet("Value", 5555); }
-
so nächste frage:
ich lese einen wert aus dem dbgrid(grid_Anz) aus....ich möchte aber alle werte spaltenweise auslesen, die da drin sind.//Zugriff auf grid_Anz auslesen der Daten und speichern in strData TBookmark SavePos; SavePos = grid_Anz->DataSource->DataSet->GetBookmark(); grid_Anz->DataSource->DataSet->First(); grid_Anz->DataSource->DataSet->MoveBy(1-1); // In 1. Zeile springen float strData = grid_Anz->Fields[1-1]->AsFloat; // Wert in 1. Spalte auslesen grid_Anz->DataSource->DataSet->GotoBookmark(SavePos); grid_Anz->DataSource->DataSet->FreeBookmark(SavePos);
-
Hallo
so nächste frage:
Und was hat diese mit dem ursprünglichen Thema dieses Threads zu tun?
Ein Thema ein Thread, ein Thread ein Thema!ich lese einen wert aus dem dbgrid(grid_Anz) aus....ich möchte aber alle werte spaltenweise auslesen, die da drin sind.
Du liest nicht Werte aus einem DBGrid aus, sondern aus dem mit dem DBGrid verbundenen DataSet.
Schau dir in der BCB-Hilfe TDataSet::First(), TDataSet::Next() und TDataSet::Eof an. Das must du nur in eine Schleife einbinden.
bis bald
akari
-
Oh ja....neues thema!
werde ich machen ggf. sry
-
Guten Tag!
Thema ist noch das gleiche!
Daten aus c++, genauer aus einem dataset an excel übergeben.ich bekomme 3 werte zurück aus einem query, die ich an das tdataset übergeben habe:
1. Datum 2. ganzzahliger wert 3. doubleich möchte diese daten jetzt in ein excelblatt eintragen, bekomme das aber nicht hin!
...danke für jede hilfe!
soweit bin ich:
while (!grid_Anz->DataSource->DataSet->Eof) { grid_Anz->DataSource->DataSet->First(); //Setze anfangspunkt(zeile/spalte) grid_Anz->DataSource->DataSet->MoveBy(1-1); // In 1. Zeile springen //Zeile/Spalte strData = grid_Anz->Fields[1-1]->AsInteger; // Wert in 1. Spalte auslesen grid_Anz->DataSource->DataSet->Next(); MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", j , 2). OlePropertySet("Value", strData); j++; z++; }
-
Was genau geht nicht (schlechte Fehlerbeschreibung)?
Was willst du mit dem MoveBy(1-1) erreichen? Nach First() ist doch schon das erste Dataset selektiert.
Was soll überhaupt dieses 1-1?
Ein Eintrag in eine Zell mache ich normalerweise so.var_Sheet.OlePropertyGet("Cells",Row,Col).OlePropertySet("Value",Text.c_str());
Wobei var_Sheet das Excelsheet ist. Evtl. kann man den Value noch nach Variant casten.
OlePropertySet("Value",Variant(Text.c_str()));
-
ich bekomme die fehlermeldung:
zugriffsverletzung bei adresse 00404f20 in modul project1.exe.lesen von adressse 00000000.er schreibt allerdings den ersten datensatz richtig in folgender form ins excel sheet und kackt dann ab:
datum://////////kennziffer:///betrag:
01.01.2005
////////////////10
//////////////////////////////52525,33es sieht im moment so aus:
// die daten aus dem datasource erfassen und in excel eintragen Variant strData; int j = 4; //beginnt in 4. zeile int z = 1; int k = 1; while (!grid_Anz->DataSource->DataSet->Eof) { grid_Anz->DataSource->DataSet->First(); //Zeile/Spalte strData = grid_Anz->Fields[z-1]->AsVariant; // Wert in 1. Spalte auslesen grid_Anz->DataSource->DataSet->Next(); //z , Sp MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", j , k). OlePropertySet("Value", strData); j++; z++; k++; }
-
Die Fehlermeldung besagt, dass du auf ungültigen Speicher zugreifst. Geh mal mit dem Debugger durch und versuche rauszubekommen wo genau das passiert. Das kann auch ein Folgefehler sein.
-
strData = grid_Anz->Fields[z-1]->AsVariant;
hier sagt er mir: auf inaktiven bereich kann nicht zugegriffen werden...
mich wundert nur, dass er den 1. datensatz einfügt und dann abkackt!
-
die lösung sieht folgendermaßen aus:
alle drei daten (spalte datum, kennzahl und betrag) werden zu excel übertragen!
// die daten aus dem datasource erfassen und in excel eintragen Variant strData; int j = 4; while (!grid_Anz->DataSource->DataSet->Eof) { //Fields n = 0 = datum;1 = kennziffer, 2 = betrag strData = grid_Anz->Fields[0]->AsVariant; // j steht für die zeile und 1 für die spalte MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", j,1). OlePropertySet("Value", strData); strData = grid_Anz->Fields[1]->AsVariant; // j steht für die zeile und 1 für die spalte MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", j,2). OlePropertySet("Value", strData); strData = grid_Anz->Fields[2]->AsVariant; // j steht für die zeile und 1 für die spalte MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", j,3). OlePropertySet("Value", strData); grid_Anz->DataSource->DataSet->Next(); j++; }