Excel - Daten nach Excel exportieren
-
Hallo, ich hatte schon mal gefragt, aber keine richtige Antwort bekommen.
Wie kann ich Daten aus einer DBGrid oder einer SQL-Query nach Excel transportieren, so dass jedes Datenfeld einer Spalte in Excel entspricht?
Danke und hoffentlich weiß das einer.
[ 17.08.2001: Beitrag editiert von: Jansen ]
-
Du könntest über Automation, Excel starten ein neues Dokument hinzufügen und dann die Felder übertragen. Dafür mußt du aber Excel installiert haben, sonst kommst du an die Automatisierungs-Objekte nicht ran.
------------------
Happy Building
wünscht
Happy Builder
Ein Besuch der sich lohnt: http://www.bcbarena.de
-
Excel ist installiert, aber mit welchen Befehlen übertrage ich. Ich finde nix in der Hilfe oder im Internet!?
-
Hallo
so habe ich es gemacht.// Excel oeffnen if ( !m_ExcelApp ) { m_ExcelApp = CoApplication_::Create(); m_ExcelApp->Workbooks->Add (BATWorksheet); } // Daten eintragen m_WorkSheet->Cells->set__Default (5,1,"Daten"); // Excel schliessen if ( m_ExcelApp ) { m_ExcelApp->set_DisplayAlerts ( 0, false ); m_ExcelApp->Quit (); }
Wenn du damit nicht zurechts kommst schick mir ein Mail fuer weitere Daten
info@BoehmSoft.deMfG
Klaus[ 09.07.2001: Beitrag editiert von: Happy Builder ]
-
Klaus hat es über die frühe Bindung gemacht. Wenn du es darüber versuchtst, mußt die die TypeLibary von Excel einbinden, oder die Serverkomponenten dei Borland in der Version 5 mitliefert.
Ich habe noch einen zweiten Weg über die späte Bindung (während der Laufzeit). Hier mußt du keine TypeLibary einbinden.
Hier ist der Code:
#include <ComObj.hpp> // include-Reihenfolge beachten #include <utilcls.h> void __fastcall TMainForm::Query1AfterOpen(TDataSet *DataSet) { lblCount2->Caption = "Query Count = " + IntToStr(Query1->RecordCount); SaveToExcel(Query1); } void __fastcall TMainForm::SaveToExcel(TQuery *pQuery) { Variant Excel; try { Excel = GetActiveOleObject("Excel.Application"); } catch(...) { Excel = CreateOleObject("Excel.Application"); } //Excel.OlePropertySet("Visible", true); try { 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"); pQuery->First(); for (int iRow=0; iRow < pQuery->RecordCount; iRow++) { for (int iCol = 0; iCol < pQuery->Fields->Count; iCol++) { Variant Range = WorkSheet.OlePropertyGet("Cells", iRow+1, iCol+1); // 1.Zeile / 1.Spalte Range.OlePropertySet("Value", pQuery->Fields->Fields[iCol]->AsString); } pQuery->Next(); } ActiveWorkBook.OleFunction("SaveAs", "D:\\Temp\\QueryResult.xls"); } catch(...) { } Excel.OleFunction("Quit"); Excel = Unassigned; }
P.S.
Das Beispiel dürfte eine Permiere im Internet sein. Ich habe noch kein Beispielprogramm für den C++ Builder gefunden der die späte Bindung ausführlich aufzeigt.[ Dieser Beitrag wurde am 13.05.2002 um 18:52 Uhr von Jansen editiert. ]