Office Objektmodell (1) Durch.NET Programme (z.b. Visual Basic) können Microsoft Office Anwendungen automatisiert werden. Diese Technik basiert auf den s.g. Interop-Assemblys das sind Sammlungen von Funktionen und Objekten, die gemeinsam durch verschiedene auf der.net Plattform ausgeführten Anwendungen benutzt werden können. Installierte Assemblys sind gelistet unter C:\Windows\assembly Peter Sobe 78 Assemblys, verwaltet von der CLR Office Objektmodell (2) Assembly Manifest Modul Metadaten Code Intermediate Language Typ (Klasse, Struktur) Eigenschaften Methoden Felder Peter Sobe 79
Office Objektmodell (3) Ein Beispiel für MS-Excel Automatisierung findet man unter http://microsoft.com/kb/301982 In Visual Studio unter Projekt: Verweis hinzufügen.net Plattform auswählen Assembly Microsoft.Office.Interop.Excel auswählen Peter Sobe 80 Imports Microsoft.Office.Interop Office Objektmodell (4) Dim oxl As Excel.Application Dim owb As Excel.Workbook Dim osheet As Excel.Worksheet oxl = CreateObject("Excel.Application") owb = oxl.workbooks.add osheet = owb.activesheet osheet.cells(1, 1).Value = "Artikel" osheet.cells(1, 2).Value = "Menge" osheet.cells(1, 3).Value = "Gewicht" osheet.cells(1, 4).Value = "Preis Nach Art dieses Beispiels können z.b. Berechnungsdaten als Tabelle ausgegeben werden und danach Diagramme erstellt werden. Peter Sobe 81
Office Objektmodell (5) Imports Microsoft.Office.Interop Dim oxl As Excel.Application Dim owb As Excel.Workbook Dim osheet As Excel.Worksheet Dim orng As Excel.Range Dim eingabe As String MsgBox("Geben Sie jetzt in F2 etwas ein!") eingabe = osheet.range("f2").value Display.Text = eingabe Peter Sobe 82 Office Objektmodell (6) Bei den bisherigen Beispielen wurde eine neue Excel Tabelle erzeugt. Der Nutzer kann diesen unter einem neuen Dateinamen speichern. Auch das Öffnen bereits existierender Dokumente ist möglich: Const NVAL As Integer = 20 Dim eingabe(nval) As Single Dim oxl As Excel.Application Dim owb As Excel.Workbook Dim osheet As Excel.Worksheet oxl = CreateObject("Excel.Application") owb = oxl.workbooks.open( C:\usr\tabellen\experimente.xls ) osheet = owb.activesheet REM Einlesen der Spalte (B1:B20) FOR i=1 TO NVAL eingabe(i) = osheet.range( B"+Format(i)).Value NEXT i Peter Sobe 83
ADO.NET (1) Active Server Pages Application A Application B Build-In- Objects Script-engine ADO ActiveX Data Objects, u.a. ADODB Objekt für Datenbanken Component A ADO Component B DB DB übernommen von Prof.Dr.Grossmann 84 ADO.NET (2) ADO bietet ein zentrales unabhängiges Datenbankobjekt dataset Mögliche (parallele) Nutzung relationaler Datenbanken (Tabellen-orientiert) und hierarchischer Datenbanken (XML) Trennung des Datenbankzugriffs und der Weiterverarbeitung der Daten XML als Datenaustauschformat zwischen Anwendung und Datenbank Mehr dazu im Abschnitt 6 Peter Sobe 85
VBA-Skript (1) Visual Basic ist als Skriptsprache in einige Office-Programme eingebaut, so z.b. in Excel. Skripte laufen innerhalb der Excel-Anwendung und dabei greifen auf Daten des Excel Dokuments zu. Die Sprache Visual Basic wird dabei mit gleicher Syntax verwendet. Aber die von der.net Plattform bereitgestellten Funktionen und Objektmethoden können nicht benutzt werden. Zum Beispiel Excel und die Datenbank Access besitzen eine eigene eingebaute Entwicklungsumgebung für VBA (zum Start Alt+F11) Peter Sobe 86 VBA-Skript (2) InputBox und MsgBox können benutzt werden Beispiel Peter Sobe 87
VBA-Skript (3) Zugriff auf Dokumentdaten aus VBA-Skripten am Beispiel von Excel Sichtbare Objekte: Application Workbook Arbeitsmappe Worksheet Tabellenblatt Range Ausgewählte Felder Peter Sobe 88 VBA-Skript (4) Programmierung wie in Visual Basic.NET. Ein Verbinden mit der Excel-Anwendung kann in der Skript-Umgebung aber weggelassen werden. Zugriff auf Dokumentdaten aus VBA-Skripten am Beispiel von Excel per Range: Range übernimmt einen Z= ActiveSheet.Range( M22 ).Value String zur Identifikation der Zelle oder des Bereichs. Z = ActiveSheet.Range( N32 ).Value = Z Spalte (A, B, C, ) dann Zeile (1,2,3,.. Alternative Technik zum Auslesen und Setzen von Zellen gegenüber Range: Cells ActiveCell muss vorher gesetzt werden Peter Sobe 89
VBA-Skript (5) Cells: Z= ActiveSheet.Cells(13,22).Value REM Angabe der Feldposition mit Zeilen- und Spaltenindex ActiveCell: Wenn vorab eine Zelle mit Activate ausgewählt wurde, kann der Bezug auf ActiveCell erfolgen Range( F8").Activate ActiveCell.Value = 37 Eine gute Übersicht zu VBA Skriptprogrammierung findet man z.b. unter ftp://ftp.fernuni-hagen.de/pub/pdf/urz-broschueren/broschueren/b012.pdf Peter Sobe 90