poniedziałek, 27 kwietnia 2009

Open XML Format SDK 2.0 - pierwsze wrażenia

Microsoft w kwietniu tego roku opublikował kolejną wersję pakietu SDK do manipulacji dokumentów w formacie OpenXML. Pakiet ten ma za zadanie ułatwić tworzenie i edycję plików w formacie OpenXML z poziomu języka programowania (np. C#), automatyzując standardowe operacje jakie zwykle implementować muszą programiści tworzący aplikacje wykorzystujące ten format. Pakiet można pobrać ze stron Microsoft'u: http://www.microsoft.com/downloads/details.aspx?FamilyID=C6E744E5-36E9-45F5-8D8C-331DF206E0D0&displaylang=en.

Gdzie szukać informacji na temat Open XML i pakietu SDK?

Pierwszy program ("Hello Word" w OpenXML)

Do projektu należy dodać następujące referencje:
  • DocumentFormat.OpenXml
  • WindowsBase
W kodzie dołączamy następujące przestrzenie nazw:
  • DocumentFormat.OpenXml;
  • DocumentFormat.OpenXml.Packaging;
  • DocumentFormat.OpenXml.Wordprocessing;
Teraz funkcja realizująca proste "Hello World" w OpenXML:
private void HelloWorld(string documentFileName)
{
  // Create a Wordprocessing document.
  using (WordprocessingDocument myDoc = WordprocessingDocument.Create(documentFileName, WordprocessingDocumentType.Document))
  {
    // Add a new main document part.
    MainDocumentPart mainPart = myDoc.AddMainDocumentPart();
    //Create Document tree for simple document.
    mainPart.Document = new Document();
    //Create Body (this element contains other elements that we want to include
    Body body = new Body();
    //Create paragraph
    Paragraph paragraph = new Paragraph();
    Run run_paragraph = new Run();
    // we want to put that text into the output document
    Text text_paragraph = new Text("Hello World!");
    //Append elements appropriately.
    run_paragraph.Append(text_paragraph);
    paragraph.Append(run_paragraph);
    body.Append(paragraph);
    mainPart.Document.Append(body);
    // Save changes to the main document part.
    mainPart.Document.Save();
  }
}
Powyższa funkcja tworzy dokument w pliku podanym przez użytkownika. Do dokumentu dodany jest paragraf który zawiera tekst "Hello World!". W ostatnim kroku dokument jest zapisywany. A jak tą funkcję wykorzystać? Poniższy przykład pyta użytkownika o plik, do którego ma być zapisany tekst, wywołuje wcześniej stworzoną funkcję i otwiera przygotowany plik przy pomocy Word (lub innej ustawionej w systemie przeglądarki plików docx).
SaveFileDialog mySaveFileDialog=new SaveFileDialog();
mySaveFileDialog.Filter = "Word 2007 file (DOCX)|*.docx";
//save dialog display:
if (mySaveFileDialog.ShowDialog() == DialogResult.OK)
{
  //call creation of HellowWord document
  HelloWorld(mySaveFileDialog.FileName);
  // let's open this deocument in Word:

  Process.Start(mySaveFileDialog.FileName);
}

Podsumowanie

Na pierwszy rzut oka, pakiet ten oferuje bardzo wygodną możliwość manipulacji plikami zgodnymi z OpenXML. Postaram się w przyszłych postach opisać bardziej zaawansowane jego możliwości.

7 komentarzy:

  1. Jak można dołaczyć w Open XML tampalte do documentu?

    Standardowo robi sie tak:
    /////////
    Word._Application oWord = new Word.ApplicationClass();
    Word._Document oDocument = new Word.DocumentClass();
    //making the application visible
    oWord.Visible = false;
    //object oTemplate
    Object oTemplate = "D:\\dot\\Plan.dot";
    //add tempalate too document
    oDocument = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);
    //////


    A jak zrobić coś takiego w OpenXML?
    Dzeki.

    OdpowiedzUsuń
  2. Witam, jeszcze szablonami się nie zajmowałem, w chwili obecnej niestety nie pomogę :(

    OdpowiedzUsuń
  3. Jak skonwertować szablon na dokument używając Open XML:
    http://www.notesfor.net/post/2009/05/27/Convert-dotx-to-docx.aspx

    Pozdrawiam FoEn

    OdpowiedzUsuń
  4. Gdzie mozna znalezc opis hierarchii obiektow Spreadsheet? workbook, workbookpart, sheet, sheets, worksheet, worksheetpart(!) .. i wymieklem :) wujek google wyjatkowo nielaskawy

    OdpowiedzUsuń
  5. Przyznam, że jeszcze Excelem się jeszcze nie zajmowałem, więc nie pomogę...

    OdpowiedzUsuń

Posty powiązane / Related posts