AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Excel Tabellen in Delphi

Offene Frage von "TH3LL"
Ein Thema von TH3LL · begonnen am 29. Okt 2006 · letzter Beitrag vom 20. Okt 2009
Antwort Antwort
TH3LL

Registriert seit: 25. Jan 2006
22 Beiträge
 
Delphi 6 Enterprise
 
#1

Excel Tabellen in Delphi

  Alt 29. Okt 2006, 08:37
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
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Excel Tabellen in Delphi

  Alt 29. Okt 2006, 08:56
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.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
TH3LL

Registriert seit: 25. Jan 2006
22 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Excel Tabellen in Delphi

  Alt 29. Okt 2006, 10:02
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?^^
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Excel Tabellen in Delphi

  Alt 29. Okt 2006, 10:13
Hallo,

ich habe keine Ahnung von Excel über Delphi (habe aber ein paar Makros selbst bearbeitet). Könnte es an falschen Schreibweisen liegen:
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 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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Excel Tabellen in Delphi

  Alt 29. Okt 2006, 10:20
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.
Angehängte Dateien
Dateityp: zip zip_515.zip (238,7 KB, 16x aufgerufen)
I come from outer space to save the human race
  Mit Zitat antworten Zitat
TH3LL

Registriert seit: 25. Jan 2006
22 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Excel Tabellen in Delphi

  Alt 29. Okt 2006, 10:45
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
    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?
  Mit Zitat antworten Zitat
TH3LL

Registriert seit: 25. Jan 2006
22 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Excel Tabellen in Delphi

  Alt 29. Okt 2006, 11:18
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:
    Excel.ActiveChart.SetSourcedata(Excel.Range['A1:D2'],xlColumns); Bei mir leider noch immer nicht!
Imemrnoch OLE error achthundertnochwas...
  Mit Zitat antworten Zitat
RoMe87

Registriert seit: 11. Okt 2009
Ort: Mannheim
8 Beiträge
 
Delphi 7 Personal
 
#8

Re: Excel Tabellen in Delphi

  Alt 20. Okt 2009, 15:55
Hat sich auf dieser Front in den letzten 3 Jahren noch was getan?
Stehe vor dem gleichen Problem.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 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