13.07.2012 Aufrufe

Office Objektmodell (1) Office Objektmodell (2)

Office Objektmodell (1) Office Objektmodell (2)

Office Objektmodell (1) Office Objektmodell (2)

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Office</strong> <strong>Objektmodell</strong> (1)<br />

Durch .NET Programme (z.B. Visual Basic) können Microsoft <strong>Office</strong><br />

Anwendungen automatisiert werden.<br />

Diese Technik basiert auf den s.g. Interop-Assemblys – das sind<br />

Sammlungen von Funktionen und Objekten, die gemeinsam durch<br />

verschiedene auf der .NET Plattform ausgeführten Anwendungen<br />

benutzt werden können.<br />

Installierte Assemblys sind gelistet unter C:\Windows\assembly<br />

Peter Sobe 78<br />

Assemblys, verwaltet von der CLR<br />

<strong>Office</strong> <strong>Objektmodell</strong> (2)<br />

Modul<br />

Assembly<br />

Manifest<br />

Metadaten<br />

Code Intermediate Language<br />

Typ (Klasse, Struktur)<br />

Eigenschaften<br />

Methoden<br />

Felder<br />

Peter Sobe 79


<strong>Office</strong> <strong>Objektmodell</strong> (3)<br />

Ein Beispiel für MS-Excel Automatisierung findet man unter<br />

http://microsoft.com/kb/301982<br />

In Visual Studio unter Projekt:<br />

• Verweis hinzufügen<br />

• .NET Plattform auswählen<br />

• Assembly Microsoft.<strong>Office</strong>.Interop.Excel auswählen<br />

Peter Sobe 80<br />

Imports Microsoft.<strong>Office</strong>.Interop<br />

Dim oXL As Excel.Application<br />

Dim oWB As Excel.Workbook<br />

Dim oSheet As Excel.Worksheet<br />

oXL = CreateObject("Excel.Application")<br />

oWB = oXL.Workbooks.Add<br />

oSheet = oWB.ActiveSheet<br />

oSheet.Cells(1, 1).Value = "Artikel"<br />

oSheet.Cells(1, 2).Value = "Menge"<br />

oSheet.Cells(1, 3).Value = "Gewicht"<br />

oSheet.Cells(1, 4).Value = "Preis“<br />

<strong>Office</strong> <strong>Objektmodell</strong> (4)<br />

Nach Art dieses Beispiels können z.B. Berechnungsdaten als Tabelle<br />

ausgegeben werden und danach Diagramme erstellt werden.<br />

Peter Sobe 81


Imports Microsoft.<strong>Office</strong>.Interop<br />

Dim oXL As Excel.Application<br />

Dim oWB As Excel.Workbook<br />

Dim oSheet As Excel.Worksheet<br />

Dim oRng As Excel.Range<br />

Dim eingabe As String<br />

<strong>Office</strong> <strong>Objektmodell</strong> (5)<br />

MsgBox("Geben Sie jetzt in F2 etwas ein!")<br />

eingabe = oSheet.Range("F2").Value<br />

Display.Text = eingabe<br />

Peter Sobe 82<br />

<strong>Office</strong> <strong>Objektmodell</strong> (6)<br />

Bei den bisherigen Beispielen wurde eine neue Excel Tabelle erzeugt. Der<br />

Nutzer kann diesen unter einem neuen Dateinamen speichern.<br />

Auch das Öffnen bereits existierender Dokumente ist möglich:<br />

Const NVAL As Integer = 20<br />

Dim eingabe(NVAL) As Single<br />

Dim oXL As Excel.Application<br />

Dim oWB As Excel.Workbook<br />

Dim oSheet As Excel.Worksheet<br />

oXL = CreateObject("Excel.Application")<br />

oWB = oXL.Workbooks.Open(“C:\usr\tabellen\experimente.xls“)<br />

oSheet = oWB.ActiveSheet<br />

REM Einlesen der Spalte (B1:B20)<br />

FOR i=1 TO NVAL<br />

eingabe(i) = oSheet.Range(„B"+Format(i)).Value<br />

NEXT i<br />

Peter Sobe 83


Application A<br />

Application B<br />

ADO – ActiveX Data<br />

Objects, u.a. ADODB<br />

Objekt für Datenbanken<br />

ADO .NET (1)<br />

Build-In-<br />

Objects<br />

Component A<br />

Active Server<br />

Pages<br />

Script-engine<br />

ADO Component B<br />

übernommen von<br />

DB<br />

DB<br />

Prof.Dr.Grossmann 84<br />

ADO .NET (2)<br />

� ADO bietet ein zentrales unabhängiges Datenbankobjekt<br />

dataSet<br />

� Mögliche (parallele) Nutzung relationaler Datenbanken<br />

(Tabellen-orientiert) und hierarchischer Datenbanken<br />

(XML)<br />

� Trennung des Datenbankzugriffs und der<br />

Weiterverarbeitung der Daten<br />

� XML als Datenaustauschformat zwischen Anwendung und<br />

Datenbank<br />

Mehr dazu im Abschnitt 6<br />

Peter Sobe 85


VBA-Skript (1)<br />

Visual Basic ist als Skriptsprache in einige <strong>Office</strong>-Programme<br />

eingebaut, so z.B. in Excel.<br />

Skripte laufen innerhalb der Excel-Anwendung und dabei greifen auf<br />

Daten des Excel Dokuments zu.<br />

Die Sprache „Visual Basic“ wird dabei mit gleicher Syntax verwendet.<br />

Aber die von der .NET Plattform bereitgestellten Funktionen und<br />

Objektmethoden können nicht benutzt werden.<br />

Zum Beispiel Excel und die Datenbank Access besitzen eine eigene<br />

eingebaute Entwicklungsumgebung für VBA (zum Start Alt+F11)<br />

Peter Sobe 86<br />

VBA-Skript (2)<br />

InputBox und MsgBox können benutzt werden<br />

Beispiel<br />

Peter Sobe 87


VBA-Skript (3)<br />

Zugriff auf Dokumentdaten aus VBA-Skripten am Beispiel von Excel<br />

Sichtbare Objekte:<br />

Application<br />

Workbook<br />

Worksheet<br />

Range<br />

Arbeitsmappe<br />

Tabellenblatt<br />

Ausgewählte Felder<br />

Peter Sobe 88<br />

VBA-Skript (4)<br />

Programmierung wie in Visual Basic .NET. Ein Verbinden mit der<br />

Excel-Anwendung kann in der Skript-Umgebung aber weggelassen<br />

werden.<br />

Zugriff auf Dokumentdaten aus VBA-Skripten am Beispiel von Excel<br />

per Range:<br />

Range übernimmt einen<br />

Z= ActiveSheet.Range(“M22“).Value<br />

String zur Identifikation der<br />

Zelle oder des Bereichs.<br />

Z = …<br />

ActiveSheet.Range(“N32“).Value = Z<br />

Spalte (A, B, C, …) dann<br />

Zeile (1,2,3,..<br />

Alternative Technik zum Auslesen und Setzen von Zellen gegenüber<br />

Range:<br />

� Cells<br />

� ActiveCell – muss vorher gesetzt werden<br />

Peter Sobe 89


VBA-Skript (5)<br />

Cells:<br />

Z= ActiveSheet.Cells(13,22).Value<br />

REM Angabe der Feldposition mit Zeilen- und Spaltenindex<br />

ActiveCell:<br />

Wenn vorab eine Zelle mit Activate ausgewählt wurde, kann der<br />

Bezug auf ActiveCell erfolgen<br />

Range(“F8").Activate<br />

ActiveCell.Value = 37<br />

Eine gute Übersicht zu VBA Skriptprogrammierung findet man z.B.<br />

unter<br />

ftp://ftp.fernuni-hagen.de/pub/pdf/urz-broschueren/broschueren/b012.pdf<br />

Peter Sobe 90

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!