Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Do 17.06.10 22:31 
Huhu,

wo finde ich eine Übersicht über den Aufbau einer 'normalen' Excel (xls) - Datei für Windows?

Ich brauche eine Möglichkeit einzelne Sheets zu erstellen.

Danke
~Mathias
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Fr 18.06.10 05:22 
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
wo finde ich eine Übersicht über den Aufbau einer 'normalen' Excel (xls) - Datei für Windows?


sc.openoffice.org/excelfileformat.pdf

Zitat:
Ich brauche eine Möglichkeit einzelne Sheets zu erstellen.


Bei installiertem Excel hilft Dir das evtl. weiter:

www.djpate.freeserve.co.uk/Automation.htm
DonManfred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148
Erhaltene Danke: 2

Windows 7
Delphi XE3 Pro + HTML5Builder
BeitragVerfasst: Fr 18.06.10 07:21 
Ansonsten ist das TMS FlexCel Studio for VCL/LCL was für Dich. Mit 75,- nicht grad kostenlos aber du kannst damit XLS erstellen und vorhandene manipulieren.

_________________
Gruss Manfred
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Fr 18.06.10 08:05 
Hallo ihr 2,

die PDF guck ich mir gleich an.
Eine kostenpflichtige Variante umgehe ich gern, da ich selbst auch ausschließlich Free/Opensource Software erstelle :)

Dass Excel installiert ist, kann ich auch leider nicht vorraussetzen (ich nutze selbst z.B. auch nur die Viewer von MS.

Danke und ein schönes WE.

~Mathias
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 18.06.10 08:47 
Der schnellste Weg ist IMHO, ddem Macrorecorder anzuschmeißen, das zu tun was Du automatisieren willst und Dir das Makro anschauen.
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Fr 18.06.10 09:01 
Hallo Bummi,

ich möchte eigentlich nichts automatisieren, sondern eine Excel-Datei erstellen, welche mit Daten aus einer Datenbank gefüttert wird.

Aber: eine OLE-Variante kann ich nicht nutzen, weil Excel u.U. nicht installiert ist.

Ich habe dazu als Basis eine Procedure von den Schweizern genommen ( www.swissdelphicente.../showcode.php?id=379 ) und angepasst für eine Datenbankstruktur.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
function SaveAsExcelFile(AGrid: TStringGrid; AFileName: string): Boolean;
const
  {$J+} CXlsBof: array[0..5of Word = ($809800$1000); {$J-}
  CXlsEof: array[0..1of Word = ($0A00);
var
  FStream: TFileStream;
  I, J: Integer;
begin
  Result := False;
  FStream := TFileStream.Create(PChar(AFileName), fmCreate or fmOpenWrite);
  try
    CXlsBof[4] := 0;
    FStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
    for i := 0 to AGrid.ColCount - 1 do
      for j := 0 to AGrid.RowCount - 1 do
        XlsWriteCellLabel(FStream, I, J, AGrid.cells[i, j]);
    FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
    Result := True;
  finally
    FStream.Free;
  end;
end;


Leider ist es mit diesem Code nicht möglich, mehrere Sheets zu erstellen (wäre angenehm, da ich mehrere Tage unterteilen könnte).
Critter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Fr 18.06.10 09:07 
Hallo,

du kannst auch per ADO auf Excel-Datein zugreifen. Der Connection-String müsste dann in etwa so aussehen:

ausblenden Quelltext
1:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Hier Pfad und Dateinamen Einfügen];Extended Properties= "Excel 8.0;HDR=Yes";Persist Security Info=False;Persist Security Info=False					


Das anlegen von Sheets könnte dann mir Create Table-Querys klappen. Das habe ich aber nicht getestet, daher bin ich nicht sicher.

critter

_________________
Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Fr 18.06.10 09:51 
Hi Critter,

danke für den Tipp. Leider habe ich bisher noch nicht mit ADO gearbeitet, daher ist mir das im Moment etwas kompliziert. ( ich nutze die freie Datenbank TDbf -> Sourceforge ) Jedoch habe ich mir das hier mal durchgelesen ( delphi.about.com/od/...a/databasecourse.htm ), glaube aber trotzdem nicht, dass ich das nutzen möchte (nenn es Lernfaul ;) ).

Jedenfalls ist es gut zu wissen, dass es noch andere Möglichkeiten gibt, Danke :)

Gruß
~Mathias
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 18.06.10 10:35 
Die Adolösung ist trivial zu implementierun und bietet den bequemsten Zugriff.
Ich habe Dir mal ein Microdemoprojekt angehängt.
Einloggen, um Attachments anzusehen!
Critter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Fr 18.06.10 10:37 
Hallo,
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
glaube aber trotzdem nicht, dass ich das nutzen möchte (nenn es Lernfaul ;) ).

das musst du selbst entscheiden, und bei dem Werk das du das rausgesucht hast, kann ich auch nachvollziehen, dass du abgeschreckt bist. Weil ich aber selbst wissen wollte ob das Anlegen von Sheets auf dem ADO Weg möglich ist, habe ich mir gerade mal folgenden Code dahin gepfuscht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Dummy.xls;Extended Properties= "Excel 8.0;HDR=Yes";Persist Security Info=False;Persist Security Info=False';
  ADOConnection1.Connected := True;
  ADOQuery1.Connection := ADOConnection1;
  ADOQuery1.SQL.Text := 'CREATE TABLE Test1 (ID integer, Name Varchar(50))';
  ADOQuery1.ExecSQL;
  ADOQuery1.SQL.Text := 'INSERT INTO Test1 (ID, Name) VALUES (1, ''Müller'')';
  ADOQuery1.ExecSQL;
  ADOConnection1.Close;

Nachdem ich in einer neuen Anwendung eine tADOConnection, eine tADOQuery und ein Button hinzugefügt habe und konnte somit feststellen, dass es klappt. Diese paar Zeilen Code legen in der Datei C:\Dummy.xls ein Sheet mit dem Namen Test1 an, welches die Spalten ID und Name sowie den Eintrag 1;Müller enthält. Ich glaube viel einfacher wirst du zu dem Ergebnis nicht kommen können - du musst nur vorher deinen inneren Schweinehund nieder ringen ;).

critter

_________________
Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)


Zuletzt bearbeitet von Critter am Fr 18.06.10 12:23, insgesamt 1-mal bearbeitet
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Fr 18.06.10 11:48 
Hallo nochmal an bummi und Critter.

Danke, dass ihr ADO auf die schnelle für mich brauchbar gemacht habt.

Leider verstehe ich nicht, warum die xls-Datei nicht im Microsoft Excel Viewer 2007 zu öffnen ist.
Liegt das daran, dass es vielleicht eine Tabelle ist, die als Datenbank aufgebaut ist, was dann eigentlich die Struktur einer Access-Datenbank wäre.. ?

Vielleicht könnte da mir nochmal jemand helfen, bitte.
Critter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Fr 18.06.10 12:23 
Hallo,

kann ich so nicht sagen. Was mir bei meinem Beispiel Code aufgefallen ist, ich halte die Connection offen, wenn das Öffnen also nicht klappt während das Beispiel-Programm geöffnet ist, dann solltest du als letzte Zeile der Funktion ADOConnection1.Close; einfügen. Sonst hält das Programm die Excel Tabelle blockiert.

critter

Ps: Habe die fehlende Zeile oben mal nachgetragen.

_________________
Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)


Zuletzt bearbeitet von Critter am Fr 18.06.10 12:44, insgesamt 1-mal bearbeitet
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Fr 18.06.10 12:31 
Du bist ein Held :)

Danke, darauf wäre ich nicht gekommen :(

Jetzt geht Dein Beispiel perfekt.
Bummi seins ist ja im Prinzip genau das gleiche, geht auch, wenn ich die Verbindung schließe.

(Das Wochenende ist gerettet ;) )

Liebe Güße
~Mathias