wert nach excel ausgeben
-
danke hat soweit funktioniert nun bringt er mir aber nach dem der befehl:
v1 = v0.OlePropertyGet("Item", 1);
ausgeführt wird folgenden fehler:
Priject Projekt1.exe raised exception class EoleSysError with message 'Ausnahmefehler aufgetreten'...
wie behebe ich nun das problem wieder?
-
weiß hier niemand weiter??
bin immernoch ratlos
-
Hallo...
ich habe nun folgenden funktionierenden Code:
Variant Excel; Excel = GetActiveOleObject("Excel.Application"); //Excel.OlePropertySet("Visible", true); Variant WorkBooks = Excel.OlePropertyGet("WorkBooks"); WorkBooks.OleFunction("Add"); Variant ActiveWorkBook = Excel.OlePropertyGet("ActiveWorkbook"); Variant WorkSheets = Excel.OlePropertyGet("Worksheets"); Variant WorkSheet = WorkSheets.OlePropertyGet("Item", 1); WorkSheet.OleFunction("Activate"); for(Form1->Memo1->Lines-> Variant Range = WorkSheet.OlePropertyGet("Cells", 1, 1); // 1.Zeile / 1.Spalte Range.OlePropertySet("Value", temp.c_str()); ActiveWorkBook.OleFunction("SaveAs", "D:\\Test.xlsx"); Excel.OleFunction("Quit"); Excel = Unassigned;
wie kann ich jetzt reihe für reihe aus dem Memofeld in die nächste zelle in excel ausgeben?
also die for schleifen vollenden die ich begonnen hab?danke für die hilfe!
-
Mit welcher BCB-Version arbeitest du?
Hier gibt es einen Bug-Report für 2007/2009 wegen der nichtssagenden Exception-Meldung, inklusive manuellem Workaround.
In Version 14.x , d.h. BCB 2010, soll das offenbar gefixt sein.Edit:
Hatte deinen neuen Beitrag nicht gesehen: was war denn nun die Ursache/Lösung für das Exception-Problem?
-
es hat gefehlt das ich: Workbook.add gemacht habe...
anschließen so wie der code nun im letzten beitrag steht, hat es funktioniert!hast du mir evtl einen tipp für mein nächstes problem?
-
Memo1->Lines->Strings[0] liefert den Inhalt der ersten Zeile, siehe TStrings/TStringList.
-
danke schonmal...hat jetzt soweit alles geklappt!
wie kann ich den jetzt werte wieder aus der Tabelle auslesen?
hab hier nur beispiele gefunden zum schreiben in ecxel aber nicht umgekehrt...
ich möchte meine ComboBoxen über eine bestehende Tabelle befüllen und weiß nicht so recht wie!
kennt sich damit jemand aus?
-
Ich hab mich mal vor einiger Zeit etwas damit beschäftigt und ähnliche Probleme gehabt.
Zuletzt hab ich dann die im BCB vorhandene Office-XP Komponente genommen und die funktioniert eigentlich ganz gut. Auch bei derzeit Windows 7 mit Office 2010
hier mal ein Beispiel Code zum reinschreiben von Daten in Zellen mit anlegen neuer Sheets:
bool __fastcall TForm_LMBT::A_ConnectExcelExecute(TObject *Sender) { String Vorlage=Pfad +"ExelDatei.xlsx"; if(!FileExists(Vorlage)) { ShowMessage("Vorlage nicht gefunden"); return true; } Excel->Workbooks->Add(TVariant(Vorlage),0); ExcelBook->ConnectTo(Excel->ActiveWorkbook); // Excel->Visible[0]=true; return false; }
bool __fastcall TForm_LMBT::A_MessungToExcelExecute(TObject *Sender, String Filename) { TStringList *MessDatei = new TStringList(); S_BT_LeistungsMessung ResDaten; int Offset=0; String ExcelSpalteMin,ExcelSpalteMax,ExcelSpalteAvg,ExcelSpalteStrom; // MessDatei->LoadFromFile("Messung.clm"); MessDatei->LoadFromFile(Filename); if(!FileExists(Filename)) { ShowMessage("Datei nicht vorhanden"); return true; } int nummer=-1; String Seitenname= RG_Messblatt->Items->Strings[RG_Messblatt->ItemIndex]; for(int i=1;i<ExcelBook->Sheets->Count;i++) { ExcelSheet->ConnectTo(ExcelBook->Sheets->get_Item(TVariant(i))); if(ExcelSheet->get_Name() == Seitenname) nummer=i; } if(nummer!=-1) { ExcelSheet->ConnectTo(ExcelBook->Sheets->get_Item(TVariant(nummer)) ); } else { ExcelSheet->ConnectTo(TVariant(ExcelBook->Sheets->get_Item(TVariant("Vorlage")))); ExcelSheet->Copy(TVariant(ExcelBook->Sheets->get_Item(TVariant("Vorlage"))), TNoParam(),0); ExcelSheet->ConnectTo(ExcelBook->Sheets->get_Item(TVariant("Vorlage (2)")) ); ExcelSheet->set_Name(TVariant(Seitenname)); } ExcelSheet->Cells->set_Item(TVariant("3"),TVariant("M"),TVariant(MessDatei->Strings[Offset])); Offset++; ExcelSheet->Cells->set_Item(TVariant("4"),TVariant("M"),TVariant(MessDatei->Strings[Offset])); [...]
Ist vielleicht nicht besonders schön, aber funktioniert.
Auslesen der Zellen geht dann übrigens mit get_Item
Edit: Hab die Verbindung noch vergessen. Und als Komponente hab ich: TExcelWorksheet *ExcelSheet;
TExcelWorkbook *ExcelBook;
TExcelApplication *Excel;
-
danke mal für dein post...
aber was meinst du mit get_Item?du hast doch schon alles mit get_Item oder?
-
sorry aber ich bekomms echt ned wirklcih zum laufen...
hat mir jemand vlt noch einen anderen lösungsansatz?ich will einfach nur die werte die in reihe 1 stehen in die Combobox schreiben dabei aber doppelte einträge wegfallen lassen...