![]() |
Datenbank: interbase • Zugriff über: Interbase
Daten aus InterbaseDB in "vorhandene" Excel-Datei
Hallo,
also ich habe schon vieles durchgeschaut, bin jetzt aber total durcheinander..... Was ich will: Ich möchte gerne Daten aus einer Db in eine vorhandene Excel-Datei schreiben. Dabei soll die vorhandene Datei als Muster dienen, welches dann mit Daten gefüllt wird. Dann möchte ich es natürlich unter einem anderen Namen abspeichern. Ich weiß jetzt aber nicht, ob ich das ganze über OLE realisieren soll(Excell ist ja vorhanden) oder die Delphi Steuerkomponente in "Server" vewenden soll (Verwende Delphi 7). Und ich habe auch keine Ahnung, wie ich es jetzt im Quellcode realisieren muss und wodrauf ich achten sollte. Was ist denn ein Workbook?-->Die Datei(Arbeitsbereich)? Mein erster Versuch war jetzt:
Delphi-Quellcode:
Also er macht ja schon eigentlich das, was ich will. Die Excel-Datei wird an den richtgen Stellen gefüllt und die anderen Daten in der Datei werden nicht gelöscht.Außerdem wird gefragt, ob ich die Datei speichern will--OK.Eigentlich will ich vorher angeben, wo es gespeichert werden soll.procedure TFrm_Bestellung.BitBtn4Click(Sender: TObject); var Excel: variant; zeile,spalte:integer; begin Excel := CreateOleObject('Excel.Application'); Excel.Workbooks.Add('c:\temp2\mappe1.xls'); For zeile:=1 to 5 do For spalte:=1 to 5 do begin Excel.Cells[zeile,spalte].Value:='WERT aus DB' end; Excel.Quit; end; Aber ist das jetzt auch sicher programmiert oder birgt es irgendwelche Gefahren?Sollte ich lieber die Komponente ExcelApllication verwenden, wenn ja was brauche ich noch dazu und wodrauf muss ich achten?? Ohh man das ist wieder viel, aber ich hoffe auf eine Antwort! Vielen Dank für Eure Mühe Gruß Spoona |
Re: Daten aus InterbaseDB in "vorhandene" Excel-Da
Zitat:
|
Re: Daten aus InterbaseDB in "vorhandene" Excel-Da
Hallo,
also die Datei ist nicht leer. Es geht darum eine Statistik zu erstellen. Die Musterdatei ist also bereits formatiert und beinhaltet Spaltennamen. Eine Textdatei ist da leider nich möglich. Aber Vielen Dank für deine Antwort. Gruß Spoona |
Re: Daten aus InterbaseDB in "vorhandene" Excel-Da
Was ist nicht möglich ? Ich will darauf hinaus, eine Datei zu erstellen aus Interbase heraus, in der die Spaltennamen aus der DB kommen und die Daten auch. Also 1. Zeile Spaltenname und alles dahinter die Daten. Das müßte sich automatisch einlesen und formatieren lassen.
Für XML und ganz sicher Word (Serienbrief) habe ich das schon gemacht. Excel ist nun mal anders, aber doch, das habe ich auch schon gemacht. Das ist auch kein Problem. Desweiteren empfehle ich Dir zu diesem Thema Lemmys Seite : ![]() |
Re: Daten aus InterbaseDB in "vorhandene" Excel-Da
Also ich wollte nicht sagen, dass es nicht möglich ist.
Nur dass es nicht ist,was ich will bzw. machen MUSS! Diese Datei muss eben danach weiter verarbeitet werden und dazu wird eben EXCEL benötigt. Ich gehe jetzt aber davon aus, dass mein Quellcode soweit richtig ist. Danke für deine Hilfe und deinen Link, den ich mir mal anschauen werde. Gruß Spoona |
Re: Daten aus InterbaseDB in "vorhandene" Excel-Da
Hi !
Du machst das alles ganz richtig. Ein Workbook ist die Datei(.xls), das Worksheet ist das Tabellenblatt. Starte in Excel den Macrorecorder und führe die Dinge aus die du benötigst, zb Datei unter anderem Namen zu Speichern, der Macrorecorder schreibt den VBA-Programmtext. Diesen kann man dann sehr einfach als 'spranze' für das OLE-objekt verwenden. Wenn Du deinem Prog einen RemoteDatamodul und TypeLibrary hinzufügst kannst Du dieses auch von Excel aus aufrufen und Dinge realisieren die wirklich sehr nett sind, jedoch für Dein Problem augenblicklich nicht erforderlich. Excel würde ich folgendermassen starten:
Delphi-Quellcode:
falls Du mehr Info brauchts, sag's :wink:
function TExcel.GetApplication:Variant;
begin if VarType(FExcelApp)=varEmpty then try FExcelApp:=GetActiveOleObject('Excel.Application'); FExcelApp.Visible:=True; except FExcelApp:= CreateOleObject('Excel.Application'); FExcelApp.Visible:=True; end; Result:=FExcelApp; end; |
Re: Daten aus InterbaseDB in "vorhandene" Excel-Da
Hallo,
vielen Dank für deine Antwort, das mit dem Makro konnte mir echt weiterhelfen. Bin jetzt schlauer. Zumindest weiß ich jetzt, dass ich kein sheet hinzufügen muss, da ich per Default ja auf dem Ersten arbeite und keine weiteren brauche.Also habe ich folgenden Code realisiert, was auch sehr gut funktioniert:
Delphi-Quellcode:
Wenn ich weitere Fragen habe dann melde ich mich einfach bei Dir.
var Excel: variant;
zeile,spalte:integer; begin Excel := CreateOleObject('Excel.Application');// VIELLEICHT noch in deine Funktion auslagern, ist schöner! if FileExists('c:\temp2\test2.xls') then begin ShowMessage('File exists!') exit; end; Excel.Workbooks.Add('c:\temp2\Muster.xls'); zeile:=1; TB_Kontengruppe.Open; TB_Kontengruppe.First; while (not (TB_Kontengruppe.Eof)) do begin if TB_KontengruppeNummer.Value > 12 then begin Excel.Cells[zeile,1].Value:=TB_KontengruppeBereich.Value; Excel.Cells[zeile,2].Value:=TB_KontengruppeNummer.Value-100; Excel.Cells[zeile,3].Value:=TB_KontengruppeNummer.Value-200; Excel.Cells[zeile,4].Value:=TB_KontengruppeNummer.Value-300; inc(zeile); end; TB_Kontengruppe.Next; end; Excel.ActiveWorkbook.SaveAs('c:\temp2\test2.xls'); Excel.Quit; Excel := Unassigned; TB_Kontengruppe.Close; end; Vielen Dank Gruß Spoona |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz