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.

13 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ń
  6. when use the same code fie is corrupting why??

    OdpowiedzUsuń

Posty powiązane / Related posts