Jens HäupelPlatform Strategy ManagerMicrosoft Deutschland GmbH These postings are provided "AS IS" with no warranties, and confer no rights. Use of included code samples are subject to the terms specified at Microsoft - Information on Terms of Use
Office als Plattform - das zumindest erzählt Microsoft (ich auch) schon seit längerem. Doch welche Technologien zählen denn zur Office-Entwicklungsplattform? Antwort: Viele. Eine genauere Antwort gibt ein jetzt veröffentlichtes Architekturdiagramm:
Sind die Augen nicht mehr so gut wie früher? Der Link hinter dem Bild führt zum Download einer Visio- bzw. XPS-Datei. (Letztere kann unter Windows Vista direkt im Browser betrachtet werden, für XP und Windows Server 2003 gibt es ein XPS Essentials Pack).
Es wird ja immer behauptet, Windows sei viel unsicherer als andere Betriebssysteme der Gegenwart. Schon aus historischen, prinzipiellen und anderen hier nicht genannten Gründen. Security Experte Jeff Jones über den Vergleich:
"Einer Analyse zufolge hat sich Windows Vista sicherheitstechnisch in den ersten sechs Monaten mehr als wacker geschlagen – und damit im Vergleich mehrere Linux-Distributionen und Mac OS X schlecht aussehen lassen ...". Aus der Studie: Vista sicherer als ... von Heise.
Aber Vista ist trotzdem schlechter als Linux und MacOS. Schon aus Prinzip. Oder?
Tom Robertson, General Manager, Interoperability and Standards and Jean Paoli, General Manager, Interoperability and XML Architecture in einem offenen Brief über Interoperabilität, Anwenderbedürfnisse und Weiterentwicklung von Formaten.
Ein paar Key Messages daraus:
Oftmals wird das Thema reduziert auf genau das: Microsoft gegen IBM und SUN Microsystems. Was soll das? Seit wann schadet ein Mehr an Auswahl dem Anwender? Wieso soll es nur einen geben können, wenn der eine nicht einmal alle Szenarien abdeckt? Wollen Sie wissen, was Damir Tomicic, Managing Director von Axinom (Entwicklung von IT Solutions, Services und Consulting) zu offenen Standards und Flexibilität und dem, was die Industire wirklich braucht, sagt dann lesen Sie hier weiter.
Wer ist der größte Pioneer der Programmiersprachen? Bill Gates? Nikolaus Wirth? Für mich ist und war es immer Anders Hejlsberg, dessen Name für Turbo Pascal, Delphi und C# steht. Die neueste Erfindung trägt den Namen Language Integrated Query Framework, oder kurz LINQ. Mit LINQ wird der Abstand zwischen dem Umgang mit Daten und der eigentlichen Programmiersprache wieder kleiner und gerade in Bezug auf XML, speziell Open XML, ist es sehr gut zu gebrauchen, um den Umgang mit den Daten einfacher und verständlicher zu machen.
Ein Beispiel: Wenn wir dieses XML Document erzeugen müßten:
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<sheetData>
<row r="1">
<c r="A1" t="inlineStr">
<is>
<t>Sample Text</t>
</is>
</c>
</row>
</sheetData>
</worksheet>
dann könnte das - getan mit dem XML DOM - etwa so aussehen:
const string spreadsheetML = @"http://schemas.openxmlformats.org/spreadsheetml/2006/main";
XmlDocument xDocWS = new XmlDocument();
XmlElement tagWorksheet = xDocWS.CreateElement("worksheet", spreadsheetML);
xDocWS.AppendChild(tagWorksheet);
XmlElement tagSheetData = xDocWS.CreateElement("sheetData", spreadsheetML);
tagWorksheet.AppendChild(tagSheetData);
XmlElement tagRow = xDocWS.CreateElement("row", spreadsheetML);
tagRow.SetAttribute("r", GetRowNumber(cellAddress));
tagSheetData.AppendChild(tagRow);
XmlElement tagCell = xDocWS.CreateElement("c", spreadsheetML);
tagCell.SetAttribute("r", cellAddress);
tagCell.SetAttribute("t", "inlineStr");
XmlElement tagIS = xDocWS.CreateElement("is", spreadsheetML);
tagCell.AppendChild(tagIS);
XmlElement tagText = xDocWS.CreateElement("t", spreadsheetML);
tagText.InnerText = cellValue;
tagIS.AppendChild(tagText);
tagRow.AppendChild(tagCell);
Der hierarchische Aufbau geht völlig verloren und damit auch schnell der Überblick. Man muß immer darauf achten, was man wo anhängt. Mit LINQ to XML wird es dagegen viel übersichlicher:
XNamespace ns = @"http://schemas.openxmlformats.org/spreadsheetml/2006/main";
XDocument xdocWS =
new XDocument(
new XElement(ns + "worksheet",
new XElement(ns + "sheetData",
new XElement(ns + "row",
new XAttribute("r", "1"),
new XElement(ns + "c",
new XAttribute("r", "A1"),
new XAttribute("t", "inlineStr"),
new XElement(ns + "is",
new XElement(ns + "t", "Sample Text")
)
);
Der hierarchische, geschachtelte Aufbau fällt sofort ins Auge und die Tatsache, daß Attribute in einem Zug angelegt und mit einem Wert versehen werden können, erspart viel Zeit. Auch der Umgang mit Namespaces wird einfacht.
LINQ wird im .NET Framework 3.5 (Visual Studio Codename "ORCAS") enthalten sein. Es lohnt sich, schon jetzt einen Blick darauf zu werfen.
In den letzten Wochen habe ich ein paar Code Clips zur Open XML Programmierung mit .NET aufgenommen. Code Clips sind kommentierte "Visual Studio Videos" mit wenigen bis gar keinen Powerpoint Folien (Ausnahme: Code Clip 1 - Vorstellung Open XML Format). Seit ein paar Tagen sind diese nun online auf MSDN-Solve verfügbar.
Folgende Themen sind hier abrufbar: Das Microsoft Office Open XML-Format
Überblick über die Architektur des Open XML Dateiformats. 22:51 Minuten Wie kann ich die Dokumenteigenschaften eines Office 2007 Dokuments auslesen und verändern? 21:49 Minuten Wie kann ich in einem Word Dokument eingebettete Bilder auslesen? 20:48 Minuten
Wie kann ich in einem Word Dokument referenzierte Bilder auslesen? 10:07 Minuten Wie kann ich ein Word 2007 Dokument programmatisch und ohne Zuhilfenahme von Word erzeugen? 22:04 Minuten Wie kann ich Word Content Controls an XML Datenquellen binden? 24:47 Minuten Wie kann ich den Custom XML Data Store mit Hilfe des .NET Frameworks auslesen? 21:09 Minuten Wie kann ich den Inhalt eines Word 2007 Dokuments auslesen? 12:23 Minuten Wie erzeuge ich ein Excel 2007 Dokument ohne Zuhilfenahme von Excel? (Teil 1 von 4) 18:43 Minuten Wie erzeuge ich ein Excel 2007 Dokument ohne Zuhilfenahme von Excel? (Teil 2 von 4) 14:58 Minuten Wie erzeuge ich ein Excel 2007 Dokument ohne Zuhilfenahme von Excel? (Teil 3 von 4) 17:54 Minuten Wie erzeuge ich ein Excel 2007 Dokument ohne Zuhilfenahme von Excel? (Teil 4 von 4) 08:12 Minuten
Viel Spaß beim Anschauen.
Gestern abend (MEZ) wurde auf der TechEd 2007 in Orlando das Microsoft Open XML SDK der Öffentlichkeit präsentiert. Es handelt sich um ein Set von Klassen und Methoden rund um System.IO.Packaging, welches es dem Open XML Entwickler leichter machen soll, Daten aus Open XML Dateien zu extrahieren, die Dateien zusammenzubauen oder zu erweitern. In der Online Dokumentation ist besonders der How do I Part zu erwähnen, der Code-Beispiele zum besten gibt.
Was muss man tun, um das SDK verwenden zu können?
Einfach - nach dem Installieren desselben, versteht sich - eine Referenz auf Microsoft.Office.DocumentFormat.OpenXml setzen und den Namespace Microsoft.Office.DocumentFormat.OpenXml.Packaging inkludieren. Dann kann's los gehen. Hier ein Beispiel, wie aus Powerpoint-Präsentationen die Notizen ausgelesen werden können:
private const string drawingML = "http://schemas.openxmlformats.org/drawingml/2006/main";
public static void GetCommentsFromPPTDocument(string filePath)
{
XmlDocument xmlComments = new XmlDocument();
using (PresentationDocument docPPT = PresentationDocument.Open(filePath, false))
PresentationPart mainPart = docPPT.PresentationPart;
foreach (SlidePart sp in mainPart.SlideParts)
NotesSlidePart notesPart = sp.NotesSlidePart;
if (notesPart != null)
xmlComments.Load(notesPart.GetStream());
XmlNameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
nsmgr.AddNamespace("a", drawingML);
string notes = string.Empty;
foreach (XmlNode xn in xmlComments.SelectNodes("//a:r", nsmgr))
notes += (xn.SelectSingleNode("a:t", nsmgr).InnerText);
}
if (notes != string.Empty)
MessageBox.Show(notes);
Das sieht doch schon ein ganzen Stück einfacher aus als vorher. Okay, es werden noch keine Absatzwechsel berücksichtigt, aber das kann jeder selbst tun. Wir sehen aber auch, dass man ohne XML-Wissen nicht weiter kommt, bekommt man doch ein XMLDocument zurück, was noch nach dem gewünschten Inhalt durchsucht werden will. Aber dank XPath geht das relativ flott vonstatten.
In den meisten Unternehmen wird Microsoft Office als primäre Arbeitsumgebung eingesetzt, es ist jedoch oft nicht vollständig ins System integriert. Dadurch gehen viele Anwendungsmöglichkeiten verloren. Denn erst die direkte Verbindung von Microsoft Office-Lösungen mit Unternehmensanwendungen öffnet vollkommen neue Wege für die Verarbeitung von Unternehmensdaten.
Erfahren Sie vor Ort, wie Ihnen Microsoft Office dabei hilft, Arbeitsprozesse zu vereinfachen, die Datenqualität zu verbessern und das Datenmanagement durch Vermeidung von redundanten Daten oder Fehleingaben zu erleichtern.
Microsoft Office Interoperability Day 2007 am 19.06.2007 im M:con Rosengarten, Mannheim
In 7 parallelen Tracks werden Partner von Microsoft Ihre Lösungen und Gedanken zur Interoperability mit Office vorstellen. Schauen Sie sich die Agenda an und melden Sie sich hier an.
Wie wäre es, wenn Ihr Monitor in Ihren Schreibtisch eingebaut wäre, ein Touchscreen selbstverständlich. Er erkennt, wenn eine Digitalkamera (geht leider noch nicht mit Film) - Bluetooth oder WLan vorausgesetzt - auf die Oberfläche gelegt wird und zeigt die Bilder auf der Oberfläche. Bei Telefonen oder MP3-Playern - sorry, Portable Multimedia Playern - geschieht ähnliches mit Kontakten, eMails oder Songs. Synchronisieren von Geräten (heutzutage auch Gadgets genannt) : einfach nebeneinanderlegen und den - oder auch die - Finger benutzen...
Super cool. Muß man gesehen haben. Mal schauen, wie lange es dauert, bis die Erfindung von Microsoft Research im Alltag auftaucht. Ich werd' schon mal anfangen zu sparen.