Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Paradox nach Excel

15 views
Skip to first unread message

Philipp Schade

unread,
Sep 27, 2001, 6:09:39 AM9/27/01
to
Hallo Delphi-Freunde,

ich stehe vor dem Problem, Daten aus einer Paradox-Tabelle nach Excel zu
speichern.
Die umgekehrte Richtung macht mir kein Problem, da ich entweder TADODataSet
in Zusammenarbeit mit dem MS OLE Jet 4.0-Treiber verwenden kann, was sehr
gut klappt, oder als Umweg über das Text/CSV-Format den BDE-eigenen
Text-Treiber verwende. Auch gut.

Jetzt sollen aber bestimmte Felder einer Paradox-Tabelle nach Excel
geschrieben werden. Hat dazu jemand Ideen? TADODataSet bietet mir zwar eine
SaveToFile-Methode, die kann aber nur ins XML-Format schreiben oder ein
sogenanntes ADTG-Format (Advance Data Tablegram) (?). Hilft mir das weiter?

Oder gibt es alternativ schöne Komponenten, die ein Abspeichern von Daten,
die von einem TTable bereitgestellt werden, nach Excel ermöglichen?

Für eure Anregungen, Ideen, Lösungen bedanke ich mich schon im Voraus.
Philipp.


Ole Reinhardt

unread,
Sep 27, 2001, 8:39:14 AM9/27/01
to
> Oder gibt es alternativ schöne Komponenten, die ein Abspeichern von Daten,
> die von einem TTable bereitgestellt werden, nach Excel ermöglichen?

Zum einen könntest Du selber ein csv File generieren, das sollte sich ja
recht einfach machen lassen, da Du duch alle Datensätze sowie alle
Felder durchiterieren kannst.

Wenn Du das nicht magst, dann verwende einfach eine dbase Tabelle, die
kann Excel direkt lesen.

Allerdings habe ich die Erfahrung gemacht, das Du je nach Excel version
eine älteres DBase Format vorsehen musst. Zur not kann man das mit einem
Schlüssel in der Registry umstellen oder vermutlich auch als Paramter
beim Öffnnen der Tabelle setzen.

Grüße,

Ole Reinhardt

--
_________________________________________________________________
| |
| WWW.R-WEB.DE Softwareentwicklung, Webdesign, Administration |
| |
| Ole Reinhardt |
| Glückaufstr. 48 Tel. / Fax: +49 (0)271 7420433 |
| 57076 Siegen Mobil: +49 (0)177 7420433 |
| Germany ole.re...@r-web.de |
|_________________________________________________________________|

Christian Kaufmann

unread,
Sep 27, 2001, 8:42:11 AM9/27/01
to
>Oder gibt es alternativ schöne Komponenten, die ein Abspeichern von Daten,
>die von einem TTable bereitgestellt werden, nach Excel ermöglichen?

TExcelApplication und eine Schleife über alle Datensätze und alle
Felder. Bedingt das auf der Maschine, wo Dein Programm läuft auch
Excel installiert ist.

cu Christian

Philipp Schade

unread,
Sep 27, 2001, 8:51:19 AM9/27/01
to
> Zum einen könntest Du selber ein csv File generieren, das sollte sich ja
> recht einfach machen lassen, da Du duch alle Datensätze sowie alle
> Felder durchiterieren kannst.

Ok, das hieße, eine Semikolon-Spalten-getrennte Textdatei zu entwerfen, so
dass man dann "automatisch" das CSV-Format kriegt. Richtig?

> Wenn Du das nicht magst, dann verwende einfach eine dbase Tabelle, die

> kann Excel direkt lesen. [...]

Hmmm, gut, darüber denke ich nochmal nach.

Vielen Dank.


Philipp Schade

unread,
Sep 27, 2001, 8:52:10 AM9/27/01
to
> TExcelApplication und eine Schleife über alle Datensätze und alle
> Felder. Bedingt das auf der Maschine, wo Dein Programm läuft auch
> Excel installiert ist.

Das klingt ganz interessant und scheinbar auch recht einfach. Dann such ich
mal die Komponente.

Vielen Dank für die Hilfe.


Ole Reinhardt

unread,
Sep 27, 2001, 9:21:16 AM9/27/01
to
> Ok, das hieße, eine Semikolon-Spalten-getrennte Textdatei zu entwerfen, so
> dass man dann "automatisch" das CSV-Format kriegt. Richtig?

Ja genau. Ich habe das neulich auch mal gemacht. Allerdings mit
tabulatoren als Trennzeichen, da ich die Kommas benötigt habe. Hier der
Code (Mit meinen Beispielspalten drin):

procedure TPlanForm.Button1Click(Sender: TObject);
Var F : TextFile;
iPCount : Integer;
sTemp : String;

Function FormatStr(Str: String): String;
Var iCount: Integer;
begin
Result:='';
For iCount:=1 to Length(Str) do
begin
If Str[iCount]=#9 then Result:=Result+' ' else
If Str[iCOunt]=#10 then else
If Str[iCount]=#13 then Result:=REsult+' ' else
Result:=Result+Str[iCount];
end;
end;

begin
If SaveDialog.Execute then
begin
AssignFile(F, SaveDialog.FileName);
Rewrite(F);
With BSCMainForm.BSC.Projektplan do
begin
sTemp:=FormatStr(PNrTitel)+#9+FormatStr(PrioTitel)+#9+
FormatStr(ZTitel)+#9+FormatStr(DescTitel)+#9+
FormatStr(CheckTitel[1])+#9+
FormatStr(CheckTitel[2])+#9+
FormatStr(CheckTitel[3])+#9+
FormatStr(CheckTitel[4])+#9+
FormatStr(ATitel)+#9+FormatStr(ETitel)+#9+
FormatStr(VTitel)+#9+FormatStr(RTitel)+#9+
FormatStr(BTitel);
Writeln(F, sTemp);
For iPCount:=0 to Length(Projekte)-1 do
If lbProjekte.Selected[iPCount] or rbEdit.Checked then
With Projekte[iPCount] do
begin
sTemp:=FormatStr(Nr)+#9+FormatStr(Prioritaet)+#9+
FormatStr(ZieleCommaList(Ziele))+#9+FormatStr(Name+'
'+Beschreibung)+#9;
If CheckFelder[1] then sTemp:=sTemp+'X'+#9 else
sTemp:=sTemp+#9;
If CheckFelder[2] then sTemp:=sTemp+'X'+#9 else
sTemp:=sTemp+#9;
If CheckFelder[3] then sTemp:=sTemp+'X'+#9 else
sTemp:=sTemp+#9;
If CheckFelder[4] then sTemp:=sTemp+'X'+#9 else
sTemp:=sTemp+#9;
sTemp:=sTemp+FormatStr(Anfang)+#9+FormatStr(Ende)+#9+

FormatStr(PersCommaList(Resp))+#9+FormatStr(PersCommaList(Ress))+#9+
FormatStr(Bemerkung);
Writeln(F,sTemp);
end;
end;
CLoseFile(F);
end;
end;

Cu,

Ole

Ole Reinhardt

unread,
Sep 27, 2001, 9:21:44 AM9/27/01
to
> Das klingt ganz interessant und scheinbar auch recht einfach. Dann such ich
> mal die Komponente.

Liegt auf der "Servers" Lasche..

Marian Aldenhövel

unread,
Sep 27, 2001, 9:20:22 AM9/27/01
to
Hi,

> Ok, das hieße, eine Semikolon-Spalten-getrennte Textdatei zu entwerfen, so
> dass man dann "automatisch" das CSV-Format kriegt. Richtig?

Ja. Primitiv etwa so:

procedure DataSetToCSV(aDataSet:TDataSet;aFileName:string);
const Delimiter=';';
var F:TextFile;
i:integer;
Zeile:string;
begin
AssignFile(F,aFileName);
rewrite(F);
try
while not aDataSet.Eof do
begin
Zeile:='';
for i:=0 to aDataSet.FieldCount-1 do
Zeile:=Zeile+aDataSet.Fields[i]+Delimiter;
if Zeile<>'' then SetLength(Zeile,Length(Zeile)-1);
writeln(F,Zeile);
end;
finally
F.Close;
end;
end;

Vorsicht: _Wirklich_ primitiv.

Ciao, MM
--
Marian Aldenhövel, Hainstraße 8, 53121 Bonn
http://www.marian-aldenhoevel.de
"War does not determine who is right, only who is left"

Thorsten v.Zitzewitz

unread,
Sep 28, 2001, 8:13:32 AM9/28/01
to
Hallo Leute,

ich habe da was.

Eine Form mit ExcelApplication, ExcelWorksheet und ExcelWoorkbook.

Im NewWorkbook Event der ExcelApplication:
#######################################################
procedure TfrmMain.ExcelApplicationNewWorkbook(Sender: TObject;
var Wb: OleVariant);
begin
ExcelWorkbook1.ConnectTo((iUnknown(wb) as ExcelWorkBook));
end;
######################################################

Dann geht es los:
procedure TfrmMain.btnExcelClick(Sender: TObject);
var i,x,y: Integer;
ItemIndex: OleVariant;
aRange : Range;

try
ExcelApplication.Connect;
except
MessageDlg('Excel may not be installed', mtError, [mbOk], 0);
Abort;
end;

// Excel starten **************************************
ExcelApplication.Visible[0] := False;
ExcelApplication.Caption := 'SQL-Tool';

ExcelApplication.Workbooks.Add(EmptyParam,ItemIndex);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets.Item[1] as _Worksheet);
// ExcelApplication.ActiveWindow.DisplayGridlines := False;

ExcelApplication.SheetsInNewWorkbook[ItemIndex] := 1;
// NeueTabelle(ItemIndex);
// ****************************************************
i := Query1.FieldCount;

y := 1;

for x := 0 to i-1 do begin
ExcelWorksheet1.Cells.Item[y,x+1].value := Query1.Fields[x].FieldName;
end;
inc(y);

Query1.First;
while not Query1.EOF do begin

for x := 0 to i-1 do begin
ExcelWorksheet1.Cells.Item[y,x+1].value := Query1.Fields[x].AsString;
end;

inc(y);
Query1.Next;
end;


ExcelApplication.Visible[0] := True;
ExcelWorkSheet1.Disconnect;
ExcelWorkBook1.Disconnect;
ExcelApplication.Disconnect;

end;

Aber 1.) Achtung. Das ist sehr langsam und nur für kleine
Datenmengen gedacht.

2.) So ganz sauber ist der Code nicht. Irgendwie wird die Verbindung
zu Excel nicht eichtig gekappt.

Wenn man den Code benutzt und irgendwan Windows beendet kommt die
Frage "Änderugen in Mappe xy speichern?", obwohl kein Excel oder so
zu sehen ist.

Weiss jemand was?

Grüße
Thorsten

0 new messages