Open XML SDK (Technical Preview) released


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.


 

Comments (3)

  1. Ralf Ehlert says:

    Das ist doch eine feine Sache, wird gleich geladen 🙂 Und danke für mein "Wunschbeispiel" 🙂

  2. Wolfgang says:

    wie kann ich Änderungen zurückschreiben?

    z.B. Excel 2007 <sheetData> = xn.InnerXml = “<row r=”1″><c r=”A1″><v>0.78740157499999996</v></c></row>”

    sheetDoc.Close();

    keine Änderungen im Paket

  3. jensha says:

    Wolfgang,

    Das XMLDocument muss nach wie vor mittels eines StreamWriters zurückgeschrieben werden, da sonst die Änderungen nur im Speicher getätigt wurden sind.

Skip to main content