Excel - Befehle (ANFANG)

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Antworten
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Excel - Befehle (ANFANG)

Beitrag von Benz »

Hi,
Da ich mit der Klasse von Microsoft irgendwie nicht klar komme ( :angry1: ), wollte ich fragen, ob ihr mir ein paar einfache Befehle für den Anfang als Beispiel hier schreiben könnt.

Mittlerweile bin ich immerhin schon soweit, dass ich Excel sichtbar machen kann.
Ich hatte schonmal mit ner COM - Schnittstelle mit einem anderen Programm zu tun, da war aber die Beschreibung um Längen besser (und verständlicher).
Bei Microschrott muss man ja im Prinzip noch VB oder C# können, um zu verstehen, was die da schreiben.

Also mein Einstieg bisher :

Code: Alles auswählen

********************************************************************************
* Für ActiveX - Word - Control                                                 *
********************************************************************************
#pragma library( "ascom10.lib" )


********************************************************************************
* Normale Include-Dateien                                                      *
********************************************************************************
#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Appevent.ch"
#include "Font.ch"


PROCEDURE AppSYS
RETURN

PROCEDURE Main

LOCAL oExcel

oExcel := CreateObject("Excel.Application")
IF Empty( oExcel )
    MsgBox( "Microsoft Excel ist nicht installiert" )
ELSE
    oExcel:visible := .T.
    
ENDIF

   **********************************************
   * Eventschleife                              *
   **********************************************
   nEvent := xbe_None
   WHILE nEvent != xbeP_Close
      nEvent := AppEvent ( @mp1, @mp2, @oXbp )
      oXbp:HandleEvent ( nEvent, mp1, mp2 )
      IF nEvent == xbeP_Quit
         QUIT   // AppQuit()
      ENDIF
   ENDDO

RETURN

Vielleicht könnt ihr mir für folgende Dinge ein kurzes Beispiel posten:

1) Öffnen einer existierenden Datei
2) Öffnen einer neuen Arbeitsmappe
3) Schreiben in Zelle A1
4) Kopieren von Zelle A1 zu Zelle B1
5) Ausführen eines Makros
6) Zeichnen eines Diagramms (geht das ???)
7) Drucken auf bestimmtem Drucker
8) Datei speichern
9) Datei speichern unter

Ich weiß, dass manche dieser Dinge schon in anderen Threads besprochen wurden, allerdings fehlt mir da immer der Einstieg und ein kleiner Ausschnitt, dass es funktioniert, was ich sehr demotivierend finde :angry3: :confused4:

Vielen Dank schonmal im Voraus!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von georg »

Hallo,


mal ein Beispiel aus einem Programm, in dem ein Excel-Report teilweise über SQLExpress, und teilweise über ActiveX befüllt wird. Am Ende wird dann die mit SQLExpress erstellte Arbeitsmappe geöffnet und "schön" gemacht:

Code: Alles auswählen

   oExcel := CreateObject("Excel.Application")
   oBook := oExcel:workBooks:open(cFile)
   oExcel:displayAlerts := .F.
   oExcel:visible       := .T.

   oBook:Sheets(1):Select()
   nSheetCount := oBook:Sheets():count
   FOR nI := 1 TO nSheetCount
      oBook:Sheets(nI):Select()
      oSheet := oBook:ActiveSheet()
      oSheet:Range("A2"):select()
      oExcel:activeWindow:FreezePanes := .T.
      oSheet:Columns("A:Z"):autoFit()
      oSheet:Rows("1:1"):Select()
      oExcel:Selection:AutoFilter()
      oSheet:Cells(2, 1):Select()
   NEXT
   oBook:Sheets(1):Select()

   oBook:SaveAs(cFile)
   oBook:close()
   oExcel:Quit()
   oExcel:destroy()
Zum Befüllen eines Feldes:

Code: Alles auswählen

oSheet:Cells(1,1):Value := cNeuerWert
oSheet:Cells(2,1):Value := oSheet:Cells(1,1)
In vielen Fällen gehe ich hin und zeichne über die Makro-Funktion auf, was ich tue, und setze das Ganze dann in Xbase um, so z.B. um aus Daten eine Pivot-Tabelle zu erstellen.

Du solltest Dir aber mal Gedanken machen, wie VBA funktioniert, denn nicht jede Funktion, die man wünscht, kann auf jede Klasse angewandt werden.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von Benz »

Wenn ich das richtig sehe, hast du mir gerade 1),3),5),8) und 9) beantwortet. DANKE :!: Zu 5) : Heißt das, es geht nicht, dass ich Makros von XBase ansteuere und diese dann ausführe? Du sagst ja, dass du sie einfach in Xbase übersetzt oder ?

Kann mir bei Gelegenheit dann noch jemand Beispiele zu 2) 4) ( 5) ) 6) und 7) geben ? Fänd ich super :!:
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von Benz »

wie kann ich denn per COM die Drucker aufrufen bzw sofort einen Drucker auswählen?
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von georg »

Hallo, Benz -


Excel starten, Makro-Aufzeichnungen starten, Drucker auswählen, Makro-Aufzeichnung beenden, Makro bearbeiten. Dann siehst Du, welche VBA-Befehle ablaufen, und die musst Du dann "nur noch" in Dein Xbase-Programm übernehmen.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von Benz »

Okay, hab ich versucht:

Code: Alles auswählen

Application.ActivePrinter := "PDFCreator"
    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,""PDFCreator"",,TRUE,,FALSE)
Das kommt dabei heraus.
Ich hab jetzt schon einiges ausprobiert mit Voranstellen des oExcel etc.. leider klappt es trotzdem noch nicht -.- Beim Compilieren kommt immer --> SYNTAX ERROR.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von georg »

Hallo,


bei mir sieht das beispielsweise so aus:

Code: Alles auswählen

Sub Makro1()
    Application.ActivePrinter = "PDFCreator auf Ne00:"
End Sub
Ich bewege meine Maus auf "Application." und drücke die rechte Maustaste, und wähle "Objektkatalog". In der zweiten Dropdownliste von oben gebe ich "application" ein. Unter Klassen geht die Markierung auf "Application", und im rechten Fenster sind die Elemente aufgelistet, .ActivePrinter steht recht weit oben, ein Klick drauf ergibt am unteren Fensterrand

Code: Alles auswählen

Property ActivePrinter As String
 Element von Excel.Application
Damit weiss ich jetzt, dass ich es etwa so anwenden kann:

Code: Alles auswählen

oExcel:ActivePrinter("mein Drucker")
Das Problem mit den VBA-Objekten ist, dass man immer wissen muss, worauf sich ein solches Objekt bezieht, dann kann man die Methoden mit Doppelpunkt und Klammern abbilden.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von Benz »

Perfekt! Danke für die detailierte und sehr hilfreiche Antwort !!! :)
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von Benz »

jetzt muss ich doch nochmal schreiben:
Xbase bringt mir nämlich für ActivePrinter immer eine Fehlermeldung, von wegen ich hätte zu wenige Paramter eingegeben.
Aber da gibts doch nur den einen mit String, in dem der Drucker steht oder nicht ?
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von georg »

Hallo, Benz -


hast Du eine Excel-Datei geöffnet, wenn Du das versuchst? Wenn Du in Excel alle Dateien schliesst, kommst Du auch nicht an den Druck-Dialog, eventuell hängt es daran. Wenn nicht, bitte eine kurze Rückmeldung, dann schaue ich mal nach, ob ich das nachvollzogen bekomme.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von Benz »

ist geöffnet. Ich mach ne .xls datei per "open" auf
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von Benz »

Kann es sein, dass die Systemzeit im Forum um eine Stunde nach hinten verschoben ist ? xD also aus "7:00" mach "8:00" ? :D (nur mal so ganz nebenbei xD)
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von AUGE_OHR »

Benz hat geschrieben:Kann es sein, dass die Systemzeit im Forum um eine Stunde nach hinten verschoben ist ? xD also aus "7:00" mach "8:00" ? :D (nur mal so ganz nebenbei xD)
bist du schon auf Sommer Zeit ?
gruss by OHR
Jimmy
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von Benz »

Bei mir am PC steht 7:48.
Im Forum beim gerade geschriebenen Beitrag steht 8:48 :D eins von beiden muss falsch sein ;)
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Excel - Befehle (ANFANG)

Beitrag von Wolfgang Ciriack »

Schau mal im Forum nach deinen Einstellungen (persönlicher Bereich), vielleicht ist dort Sommerzeit aktiv ?
Viele Grüße
Wolfgang
Benutzeravatar
Christof
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Mo, 01. Okt 2007 17:14
Wohnort: Bedburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von Christof »

Hallo Benz,

ich bin mir jetzt gar nicht sicher, ob Deine Frage 5) schon beantwortet ist?

Klar kannst Du aus xBase++ raus auch Makros starten.

Code: Alles auswählen

oExcel:Run("TestMakro")
M.E. ist es wichtig, dass als Objekt das Excel-Objekt und nicht das Workbook-Objekt genommen wird.

Gruß

Christof
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Excel - Befehle (ANFANG)

Beitrag von Benz »

super =) danke, genau das, was ich noch gebraucht habe =)
Antworten