AGB  ·  Datenschutz  ·  Impressum  







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

Excel Automation

Ein Thema von Cogito · begonnen am 13. Dez 2011 · letzter Beitrag vom 15. Dez 2011
Antwort Antwort
Seite 1 von 2  1 2      
Cogito

Registriert seit: 12. Jun 2008
280 Beiträge
 
#1

Excel Automation

  Alt 13. Dez 2011, 12:40
Hallo zusammen,

ich müsste von Delphi aus Excel Spreadsheets auslesen, also nicht jeden Wert, sondern zu bestimmten Zellen springen usw...
Ich weiß das dieses Thema schon öfter behandelt wurde, aber nach Benutzung der Suchfunktion klicke ich bereits auf der 10.ten Seite rum und finde keine Einführung oder Grundlagen, wie ich Excel ansteuern kann. Was ich bräuchte wäre vielleicht eine Rumpfapplikation wo ich sehen kann, wie man auf Excel zugreift. Kennt einer so etwas?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Excel Automation

  Alt 13. Dez 2011, 12:50
Wie wäre es mit einem Tutorial?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Cogito

Registriert seit: 12. Jun 2008
280 Beiträge
 
#3

AW: Excel Automation

  Alt 13. Dez 2011, 13:23
Wie wäre es mit einem Tutorial?
Hmm.., das scheint fehlerhaft zu sein.
Auf der 2. Seite beim Thema "Daten an Excel übergeben" muckt der Compiler bei folgender Anweisung...

Code:
ExcelWorksheet.ConnectTo([B]ExcelWorkbook[/B].Sheets.Item[1] as ExcelWorkSheet);
mit der Fehlermeldung ..."Operator ist auf diesen Operandentyp nicht anwendbar!" Ausserdem steht im Tutorial ExcelWorkbook1 (siehe Fettdruck), was ja wohl auch falsch ist.
Kann mir jemand weiterhelfen oder hat einer noch einen anderen Vorschlag ?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Excel Automation

  Alt 13. Dez 2011, 14:23
Vielleicht hilft Dir das weiter:
(ist alles anderes als optimal aber lauffähig)
Delphi-Quellcode:
(* Liest Exceldatei *)
function LIESEXCEL(const datei:string;const sheet:integer;
                   var startzeile,endzeile,startspalte,endspalte:integer;
                   const fontinfo:boolean=false;
                   const colorinfo:boolean=false):tstringlist;
const
  DELIMMITERLINE='........';
var
  maxZeil,
  maxSpal : integer;
  ll : tstringlist;
  i,j : integer;
  excel : variant;
  zelle : ansistring; {!! shortstring=Begrenzung ; kann auch ansistring sein!}
begin
  ll:=tstringlist.Create;
  maxZeil:=0;
  maxSpal:=0;
  try
    excel:=createoleobject('EXCEL.APPLICATION');
  except
    showmessage('Excel kann nicht gestartet werden!');
    exit;
  end;
  excel.visible:=true; { visible nur für test-zwecke }
  excel.workbooks.Open(Filename:=datei);
  excel.activeworkbook.sheets[sheet].activate; { 1. Worksheet}
  
  {-- Excel zählt von 1..x }
  maxZeil:=excel.activesheet.usedrange.rows.count;
  maxSpal:=excel.activesheet.usedrange.columns.count;
  if StartZeile=0 then Startzeile:=1;
  if StartSpalte=0 then StartSpalte:=1;
  {---------------------}
  if endZeile>maxzeil then endZeile:=maxZeil;
  if endSpalte>maxspal then endSpalte:=maxSpal;
  for i:=startZeile to endZeile do begin
    for j:=startSpalte to endSpalte do begin
      zelle:=excel.activesheet.cells[i,j]; { Lese Wert }
      excel.activesheet.cells[i+1,j+1].select;
      if fontinfo then
        zelle:=zelle+'|'+excel.selection.font.name;
        if excel.activesheet.cells[i+1,j+1].font.Strikethrough=True then Zelle:=zelle+'(gestrichen)';
      if colorinfo then
        zelle:=zelle+'Farbe:'+inttostr(excel.activesheet.cells[i+1,j+1].font.colorindex);
      ll.Add(zelle);
    end;
    ll.add(DELIMITERLINE);
  end;
  excel.ActiveWorkbook.Close;
  excel.quit;
  result:=ll;
end;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Excel Automation

  Alt 13. Dez 2011, 14:52
Hallo,
Zitat aus dem Tutorial (was eigentlich wirklich einfach und verständlich geschrieben ist)
Nicht vergessen: Wer keine Komponenten hat muss die Variablen deklarieren und erzeugen (ExcelWorkbook:TExcelWorkbook; ExcelWorkSheet:TExcelWorksheet).
Also: Entweder Komponente auf dein Form ziehen, oder halt selbst "createn"
Ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Cogito

Registriert seit: 12. Jun 2008
280 Beiträge
 
#6

AW: Excel Automation

  Alt 13. Dez 2011, 15:00
Hallo,
Zitat aus dem Tutorial (was eigentlich wirklich einfach und verständlich geschrieben ist)
Nicht vergessen: Wer keine Komponenten hat muss die Variablen deklarieren und erzeugen (ExcelWorkbook:TExcelWorkbook; ExcelWorkSheet:TExcelWorksheet).
Also: Entweder Komponente auf dein Form ziehen, oder halt selbst "createn"
Ciao
Frank
Natürlich habe ich die Komponenten auf die Form gezogen...
  Mit Zitat antworten Zitat
Cogito

Registriert seit: 12. Jun 2008
280 Beiträge
 
#7

AW: Excel Automation

  Alt 13. Dez 2011, 15:14
Vielleicht hilft Dir das weiter:
(ist alles anderes als optimal aber lauffähig)
Delphi-Quellcode:
(* Liest Exceldatei *)
function LIESEXCEL(const datei:string;const sheet:integer;
                   var startzeile,endzeile,startspalte,endspalte:integer;
                   const fontinfo:boolean=false;
                   const colorinfo:boolean=false):tstringlist;
const
  DELIMMITERLINE='........';
var
  maxZeil,
  maxSpal : integer;
  ll : tstringlist;
  i,j : integer;
  excel : variant;
  zelle : ansistring; {!! shortstring=Begrenzung ; kann auch ansistring sein!}
begin
  ll:=tstringlist.Create;
  maxZeil:=0;
  maxSpal:=0;
  try
    excel:=createoleobject('EXCEL.APPLICATION');
  except
    showmessage('Excel kann nicht gestartet werden!');
    exit;
  end;
  excel.visible:=true; { visible nur für test-zwecke }
  excel.workbooks.Open(Filename:=datei);
  excel.activeworkbook.sheets[sheet].activate; { 1. Worksheet}
  
  {-- Excel zählt von 1..x }
  maxZeil:=excel.activesheet.usedrange.rows.count;
  maxSpal:=excel.activesheet.usedrange.columns.count;
  if StartZeile=0 then Startzeile:=1;
  if StartSpalte=0 then StartSpalte:=1;
  {---------------------}
  if endZeile>maxzeil then endZeile:=maxZeil;
  if endSpalte>maxspal then endSpalte:=maxSpal;
  for i:=startZeile to endZeile do begin
    for j:=startSpalte to endSpalte do begin
      zelle:=excel.activesheet.cells[i,j]; { Lese Wert }
      excel.activesheet.cells[i+1,j+1].select;
      if fontinfo then
        zelle:=zelle+'|'+excel.selection.font.name;
        if excel.activesheet.cells[i+1,j+1].font.Strikethrough=True then Zelle:=zelle+'(gestrichen)';
      if colorinfo then
        zelle:=zelle+'Farbe:'+inttostr(excel.activesheet.cells[i+1,j+1].font.colorindex);
      ll.Add(zelle);
    end;
    ll.add(DELIMITERLINE);
  end;
  excel.ActiveWorkbook.Close;
  excel.quit;
  result:=ll;
end;
Gruß
K-H
Das sieht schon deutlich besser aus.
Eine kleine Sache wäre da noch:
Bei deinem Beispiel fragt Excel am Schluss immer ob die Datei gespeichert werden soll. Kann ich diese Meldung irgendwie unterdrücken?
  Mit Zitat antworten Zitat
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Excel Automation

  Alt 13. Dez 2011, 15:27
Jo, selbst speichern.

Excel.ActiveWorkbook.SaveAs(Dateiname);

oder
Excel.ActiveWorkbook.Save;

wenn der alte Name beibehalten bleinen soll.
Ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Cogito

Registriert seit: 12. Jun 2008
280 Beiträge
 
#9

AW: Excel Automation

  Alt 13. Dez 2011, 15:54
Das ist aber eigentlich nicht so fein... falls die Excel Sheets beispielsweise in einem Verzeichnis mit ungenügenden Schreibrechten liegen, kracht's jedesmal. Gibt's denn keine Möglichkeit die Anzeige des Dialogs zu unterdrücken ? Ich lese aus den Sheets ja nur aus.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Excel Automation

  Alt 13. Dez 2011, 16:06
Hi,

mit der Fehlermeldung ..."Operator ist auf diesen Operandentyp nicht anwendbar!" Ausserdem steht im Tutorial ExcelWorkbook1 (siehe Fettdruck), was ja wohl auch falsch ist.
Kann mir jemand weiterhelfen oder hat einer noch einen anderen Vorschlag ?
warum falsch? Was soll dann da stehen? Das Tutorial habe ich mit MSOffice 2000 geschrieben - keinen PLan ob das aktuell auch mit der 2007er oder 2010er läuft - habe ich leider nicht. Wenn Du die Komponenten hast, dann sollte es ein leichtes sein, den Fehler zu finden - habe ich nichts gegen einen Hinweis, dann würde ich das Tutorial aktualisieren...

Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:31 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