AGB  ·  Datenschutz  ·  Impressum  







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

EXCEL-Befehle anwenden

Ein Thema von Luca1 · begonnen am 6. Mai 2022 · letzter Beitrag vom 6. Mai 2022
Antwort Antwort
Luca1

Registriert seit: 6. Mai 2022
3 Beiträge
 
#1

EXCEL-Befehle anwenden

  Alt 6. Mai 2022, 10:50
Hallo ich bin neu hier.
Habe auch gerade erst begonnen in der Schule zu programmieren.
Bisschen kann ich schon, aber net so viel.
Meine Frage:
Kann ich mit Delphi in ein EXCEL Arbeitsblatt gehen und dort EXCEL Befehle ausführen.
z.B wie viele Zeilen hat das EXCEL Arbeitsblatt

Ich kann auch in EXCEL kleine VBA Makros schreiben.
Kann ich da mit Delphi abfragen ob das Makro in der Arbeitsmappe ist.

Vielleicht kann mir ja jemand Antwort geben.

Danke
Luca
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: EXCEL-Befehle anwenden

  Alt 6. Mai 2022, 11:33
Hi Luca

Zuerst mal herzlich willkommen!

Zu deiner Frage:
Zitat:
Kann ich mit Delphi in ein EXCEL Arbeitsblatt gehen und dort EXCEL Befehle ausführen.
z.B wie viele Zeilen hat das EXCEL Arbeitsblatt
Nein, dass ist nicht möglich. Officeprogramme können 'nur' mit VBA bearbeitet werden.

Aber du kannst Office-Programme mit Delphi fernsteuern, wie hier zum Beispiel.
Gib doch mal im Suchfeld oben rechts unter den Worten Datenschutz und Impressum den Begriff 'Excel fernsteuern' ein. Du wirst da eine ganze Menge zum Thema finden.
Unter dem Menuepunkt <Komponente - Package installieren> wird dir ein grösserer Dialog angezeigt, der die installierten Komponenten mit gesetzten Häckchen anzeigt. Wenn diese Häckchen nicht gesetzt sind, ist/sind die Komponenten nicht installiert - setze das Häcken, und sie werden in der Palette angezeigt.

Es ist ausserdem hilfreich, wenn du eines oder mehrere Office-Programme installiert hast. Damit hast du auch zugang zur VBA-Umgebung und die zugehörige Hilfe.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Luca1

Registriert seit: 6. Mai 2022
3 Beiträge
 
#3

AW: EXCEL-Befehle anwenden

  Alt 6. Mai 2022, 11:49
Danke sehr.

Ich habe gerade was hier im Forum gefunden was mir weiterhilft.


Excel.Range['B:B'].Name := 'Test'; // Bereich Test einrichten
max_zeile:=excel.range['Test'].rows.count

Ich möchte ja herausfinden welches die letzte Zeilennummer ist in die geschrieben wurde.
Im VBA gibt es den Befehl .Cells(Rows.Count, 3).End(xlUp).Row um beispielsweise den letzten Wert der 3ten Spalte zu ermitteln.

Aber wie bringe ich .Cells(Rows.Count, 3).End(xlUp).Row in meinem Delphi unter.

Gruß
Luca
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: EXCEL-Befehle anwenden

  Alt 6. Mai 2022, 12:15
Nicht mehr ganz taufrisch, aber das Meiste sollte noch funktionieren: https://www.delphi-treff.de/tutorial...von-ms-office/
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: EXCEL-Befehle anwenden

  Alt 6. Mai 2022, 12:19
Wenn du dir die Links zu Excel-Fensteuern, wie oben vorgeschlagen anschaust, wirst du sehen, dass du über Delphi Zugriff zum Objektmodell von Excel bekommen kannst, so dass du Dinge, die du im VBA zuerst ausprobierst, um zu sehen wie es geht, dann relativ leicht nach Delphi übernehmen kannst. Du musst nur beachten, das in Delphi bei Arrays und Listen eckige Klammern benutzt werden und das gewisse Excel-Konstanten, wie hier z.B. xlUp in Delphi nicht bekannt sind. Daher musst du in Excel schauen, wofür xlUp steht (oft ein Interger-Wert) und das dann einbauen:

const xlUp=1;
//Wenn dann w eine variable ist, in der eine Referenz auf das Excel-Worksheet gespeichert ist, könnte es so gehen:
w.Cells[w.Rows.Count, 3].End(xlUp).Row in meinem Delphi unter.
Ralph
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
701 Beiträge
 
Delphi 12 Athens
 
#6

AW: EXCEL-Befehle anwenden

  Alt 6. Mai 2022, 13:03
Excel ist ein OLE Automation Server und Delphi unterstützt OLE Automation seit Delphi 1. Die einfachste Methode ist late binding über Variants, die Support für IDispatch quasi eingebaut haben. Das sieht etwa so aus:
Delphi-Quellcode:
var
  Excel, WB: OLEVariant;
  LCount: Integer;
  LName: string;
  LPath: string;
begin
  Excel := CreateOleObject('Excel.Application');
  try
    LPath := TPath.Combine(TPath.GetDocumentsPath, 'sflib.xlsx');
    Excel.Workbooks.Open(LPath);
    WB := Excel.Workbooks.Item[1];
    WB.Activate;
    LName := WB.Name;
    LCount := WB.Sheets.Count;
    ShowMessage(Format('The workbook %s has %d sheets.',
      [LName, LCount]));
    WB.Close;
  finally
    Excel.Quit;
  end;
Die notwendigen Units in der Uses-Klausel sind System.Win.ComObj und (für TPath) System.IOUtils.
Diese Art von OLE Automation ist von der Syntax her der von VBA sehr ähnlich, aber es gibt einen massiven Nachteil:
Der Compiler "kennt" den verwendeten Automation Server nicht und kann daher den Kode nicht prüfen, etwaige Fehler werden erst zur Laufzeit angezeigt. Und Code completion geht auch nicht, man muss sich also quasi blind anhand der Excel-VBA Dokumentation durchschlagen.

Die Alternative ist early binding, die Verwendung von in der type library definierten interfaces des Servers. Dafür braucht man eine durch Import der type library erstellte Unit. Delphi liefert eine mit, drei Versionen sogar, die neueste ist Excel2010.pas.

Damit sieht der Kode in etwa so aus:

Delphi-Quellcode:
var
  Excel: ExcelApplication;
  WB: ExcelWorkbook;
  LCount: Integer;
  LName: string;
  LPath: string;
begin
  Excel := CreateOleObject('Excel.Application') as ExcelApplication;
  try
    LPath := TPath.Combine(TPath.GetDocumentsPath, 'sflib.xlsx');
    Excel.Workbooks.Open(LPath, false, false, Unassigned,Unassigned,
      Unassigned,Unassigned,Unassigned,Unassigned,Unassigned,Unassigned,
      Unassigned,Unassigned,Unassigned,Unassigned, 1031);
    WB := Excel.Workbooks.Item[1];
    WB.Activate(1031);
    LName := WB.Name;
    LCount := WB.Sheets.Count;
    ShowMessage(Format('The workbook %s has %d sheets.',
      [LName, LCount]));
    WB.Close(false, Unassigned, Unassigned, 1031);
  finally
    Excel.Quit;
  end;
Code completion funktioniert, aber leider hat auch das seinen Preis: man muss immer für alle Parameter einer Funktion einen Wert angeben, auch für die optionalen. "Unassigned" ist ein "leerer" OleVariant, den die Unit System.Variants zur Verfügung stellt.

Man kann beide Methoden auch mischen...
Peter Below
  Mit Zitat antworten Zitat
Luca1

Registriert seit: 6. Mai 2022
3 Beiträge
 
#7

AW: EXCEL-Befehle anwenden

  Alt 6. Mai 2022, 13:10
Herzlichen Dank an alle.
Da habe ich jetzt eine Menge zu tun.
Sobald ich meine Lösung habe stelle ich sie hier ein.
Bis hoffentlich bald
Luca
  Mit Zitat antworten Zitat
Monday

Registriert seit: 24. Aug 2012
103 Beiträge
 
FreePascal / Lazarus
 
#8

AW: EXCEL-Befehle anwenden

  Alt 6. Mai 2022, 17:48
Welches Problem willst du den konkret lösen?

Das meiste lässt sich innerhalb von Excel lösen.
  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 11:28 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