Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Excel Tabellen in Delphi (https://www.delphipraxis.net/79817-excel-tabellen-delphi.html)

TH3LL 29. Okt 2006 07:37


Excel Tabellen in Delphi
 
Hi Leute !

Ich würde gerne mit Hilfe von Delphi eine Excel-Anwendung öffnen und in dieser ein Diagramm erzeugen.
Das Öffnen einer Excel-Applikation und das Eintragen von Daten in Felder ist mir schon gelungen (hat ne Weile gedauert), aber ich schaffe es nicht ein Diagramm zu erzeugen! In der Delphi-Hilfe stehen die Befehle für eine Excel-Applikation nicht.

Programmtext bisher:
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var
 Excel : Variant;
 gridzei,zeile,spalte: longint;
begin
 gridzei := 1; zeile:=2; spalte:=1;
 try
  Excel := CreateOleObject('Excel.Application');
  Excel.Visible := False;
  Excel.Workbooks.add;
 except
  ShowMessage('Excel konnte nicht gestartet werden !');
  exit;
 end;
    //Beschriftungen für die Erste Zeile
    Excel.Cells[1,1].value  := 'U1';
    Excel.Cells[1,2].value  := 'U2';
    Excel.Cells[1,3].value  := 'V1';
    Excel.Cells[1,4].value  := 'V2';
    Excel.Cells.Select;
    Excel.Selection.Columnwidth:=7;
 try
  while gridzei <> x do
   begin
    //Eintragen der Werte
    Excel.Cells[zeile,spalte].value  := Wert1[x];
    Excel.Cells[zeile,spalte+1].value := Wert2[x];
    Excel.Cells[zeile,spalte+2].value := Wert3[x];
    Excel.Cells[zeile,spalte+3].value := Wert4[x];
    zeile := zeile+1;
    gridzei := gridzei+1;
    inc(x);
   end;
    Showmessage('Excel-Export beendet !' +#13+'Total exportierte Daten : ' + IntToStr(gridzei));
    Zeile:= 2;
    Spalte:= 1;
    Excel.visible:=true;

  except
  Showmessage('Fehler beim Excel-Export ! Abgebrochen...');
 end;

end;
Nun sollen in der anwendung die Felder (1,1) bis (zeile,4) in einem Diagramm vom Typ "Linie" (standard) dargestellt werden.

Wisst ihr wie ich das hinkriegen kann?

Ach ja... Immer wenn ich eine Excel Anwendung so in Delphi aufrufe kriege ich beim Herunterfahren des PCs eine Fehlermeldung "MappeX hat einen Fehler verursacht". Muss ich eine Excel Applikation nach Benutzung schliessen? Wenn ja, wie kriege ich das hin ?

Danke schonmal :D

Jens Schumann 29. Okt 2006 07:56

Re: Excel Tabellen in Delphi
 
Hallo,
die nötigen Excelmethoden erhälts Du wenn Du ein Makro auf zeichnest
Code:
Sub Makro1()
'
' Makro1 Makro
' Makro am 29.10.2006 von Jens Schumann aufgezeichnet
'

'
    Range("E8:H9").Select
    Charts.Add
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Sheets("Tabelle1").Range("E8:H9")
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Tabelle1"
End Sub
Die gilt es jetzt mit Delphi nachzubilden. Das Excelobjektmodell ist in der Datei VBAXL10.CHM (die Nummern kann je nach Excel-Version variieren) sehr gut beschrieben.

TH3LL 29. Okt 2006 09:02

Re: Excel Tabellen in Delphi
 
Hmm.. Was ist denn die Lücke zwischen Sourcedata und source?
Da sagter mir ein Operator fehlt ;)

Soll es in der Art aussehen?
Delphi-Quellcode:
    s:='A1:D'+inttostr(Zeile);
    Excel.Charts.Add;
    Excel.Activechart.Charttype:=xlLine;
    Excel.ActiveChart.SetSourcedata;
    Excel.Activechart.Source:=Excel.Range(s);
Hmm.. nein, kann nicht sein... in der Zeile
Excel.ActiveChart.SetSourcedata;
kriege ich nen Abbruch "Ungültige Parameterzahl" und in der nächsten "Mitglied nicht gefunden"...

Mit der Zeile
Excel.ActiveChart.SetSourcedata Source:=Excel.Sheets('Tabelle1').Range(s);
Sagt er an Dieser Stelle:................^
"Missing Operator or semikolon"

Würde es mir helfen, wenn ich wüsste, was ein Makro ist?^^ :roll:

Jürgen Thomas 29. Okt 2006 09:13

Re: Excel Tabellen in Delphi
 
Hallo,

ich habe keine Ahnung von Excel über Delphi (habe aber ein paar Makros selbst bearbeitet). Könnte es an falschen Schreibweisen liegen:
Zitat:

Zitat von Jens Schumann
Code:
Sub Makro1()
'
' Makro1 Makro
' Makro am 29.10.2006 von Jens Schumann aufgezeichnet
'   usw.
    ActiveChart.SetSourceData Source=Sheets(&quot;Tabelle1&quot;).Range(&quot;E8:H9&quot;)
    ActiveChart.Location Where=xlLocationAsObject, Name=&quot;Tabelle1&quot;
End Sub

Hat Jens vielleicht bei der Parameter-Zuweisung versehentlich den Doppelpunkt von Delphi statt der direkten Zuweisung von VBA verwendet?
Zitat:

Zitat von TH3LL
in der Zeile
Excel.ActiveChart.SetSourcedata;
kriege ich nen Abbruch "Ungültige Parameterzahl" und in der nächsten "Mitglied nicht gefunden"...

Würde es mir helfen, wenn ich wüsste, was ein Makro ist?^^ :roll:

Das sollte man schon wissen, wenn man mit Excel arbeitet, z.B. Wiki: Makro. Steht in der von Jens angegebenen Hilfedatei wirklich nichts darüber, wie Makro-Befehle in Delphi umzusetzen sind?

Gruß Jürgen

Jens Schumann 29. Okt 2006 09:20

Re: Excel Tabellen in Delphi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Jürgen Thomas
Steht in der von Jens angegebenen Hilfedatei wirklich nichts darüber, wie Makro-Befehle in Delphi umzusetzen sind?

Nein, das ist die VBA Hilfe Datei für Excel. Mann muss nur wissen wie man das in Delphi umsetzt. Dafür ist es zwingend notwenig (für mich) die Excel2000.pas oder ExcelXP.pas Sourcedatei zu haben um die Makrobefehle darin zu finden.

Ich habe mal versucht mit den Serverkomponenten ein Beispiel zu basteln (ich verwende gundsätzlich die frühe Bindung)
Delphi-Quellcode:
procedure TForm1.GenerateChart;
var
  Cells     : ExcelRange;
  DataRange : ExcelRange;
  ExcelChart : ChartObject;
  Chart     : _Chart;
begin
  OpenExcel;
  Try
    ExcelApplication.Workbooks.Add(EmptyParam,FLCID);
    ExcelWorkbook.ConnectTo(ExcelApplication.ActiveWorkBook);
    ExcelWorksheet.ConnectTo(ExcelWorkbook.Sheets[1] as ExcelXP._WorkSheet);
    ExcelChart:=(ExcelWorkSheet.ChartObjects as ChartObjects).Add(20,20,200,200);
    ExcelChart.Name:='Chart1';
    Chart:=ExcelChart.Chart;

    Cells:=ExcelWorksheet.Cells;

    Cells.Item[1,1]:='U1';
    Cells.Item[1,2]:='U2';
    Cells.Item[1,3]:='V1';
    Cells.Item[1,4]:='V2';

    Cells.Item[2,1]:='1';
    Cells.Item[2,2]:='2';
    Cells.Item[2,3]:='3';
    Cells.Item[2,4]:='4';

    DataRange:=Cells.Range['A1','D2'];
    Chart.SetSourceData(DataRange,xlRows); // Hier gibt es eine Zugriffsverletzung
//    ExcelChart.Chart.ChartType:=xlLine;


    // Jetzt das Ergebnis speichern
    ExcelWorkbook.SaveAs('c:\test.xls',EmptyParam,
                                   EmptyParam,
                                   EmptyParam,
                                   EmptyParam,
                                   EmptyParam,
                                   xlNoChange,
                                   EmptyParam,
                                   EmptyParam,
                                   EmptyParam,
                                   EmptyParam,
                                   EmptyParam,
                                   FLCID);
  Finally
    CloseExcel;
  end;
end;
Warum es zu der Zugriffsverletzung kommt weiss ich noch nicht.

TH3LL 29. Okt 2006 09:45

Re: Excel Tabellen in Delphi
 
Funktioniert leider auch nicht..

Delphi-Quellcode:
   
    Excel.Charts.Add;
    Excel.Activechart.Charttype:=xlLine;
    Excel.ActiveChart.SetSourcedata(Excel.Cells.Range['A1','D'+inttostr(Zeile)]);
führt in der letzten Zeile zu einem "OLE ---" Error, und
Delphi-Quellcode:
    Excel.ActiveChart.SetSourcedata(['A1','D'+inttostr(Zeile)]);
zu einem "Typkonflikt".

Ich habe versucht eine "ExcelRange" festzulegen, aber der kennt die Variable nicht. Genausowenig wie CloseExcel. Fehlt mit eine lib?

TH3LL 29. Okt 2006 10:18

Re: Excel Tabellen in Delphi
 
Hmm.. zwar miserable automatische überstzung, aber vielleicht liegts ja an SP 2...

Hier ist mal ein Artikel dazu...

Ich verstehe das so: Ich soll REGSVR32 OLEPRO32.DLL ausführen, dann dürfte der Fehler nicht mehr auftreten.

Nach anderen Foreneinträgen hat es bei betreffenden Personen so funktioniert:
Delphi-Quellcode:
    Excel.ActiveChart.SetSourcedata(Excel.Range['A1:D2'],xlColumns);
Bei mir leider noch immer nicht!
Imemrnoch OLE error achthundertnochwas... :wall:

RoMe87 20. Okt 2009 14:55

Re: Excel Tabellen in Delphi
 
Hat sich auf dieser Front in den letzten 3 Jahren noch was getan?
Stehe vor dem gleichen Problem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz