niedziela, 6 września 2009

Modyfikacja zawartości dokumentów DOCX (Część 1.: Wprowadzenie)[PL]

Promujkick it on DotNetKicks.com(English version)Shout it(English version)

W ramach kontynuacji tematyki związanej z Open XML Format SDK, chciałbym dzisiaj zwrócić uwagę kolejną funkcjonalność tego pakietu SDK, a mianowicie możliwość modyfikacji (edycji, dodawania komentarzy, itp. …) istniejących dokumentów.

W tym przykładzie załóżmy, że chcemy dodać na końcu istniejącego dokumentu docx nowy paragraf (zawierający znany tekst: "Hello World! ").Przykładowa funkcja, która może wytworzyć taki paragraf może wyglądać następująco:

private Paragraph CreateAndReturnHelloWorldParagraph()
{
   //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 );
   return paragraph;
}

Teraz dodajmy nasz nowy paragraf (z tekstem "Hello World" na końcu istniejącego dokumentu.

Pierwszą czynnością, którą należy zrobić to otworzyć dokument, w tym celu można wykorzystać funkcję: "WordprocessingDocument.Open". Pierwszym argumentem funkcji jest nazwa pliku, natomiast drugi określa tryb dostępu (true jeśli plik ma być otworzony do odczytu I zapisu). Oczywiście ponieważ my będziemy modyfikować plik, dlatego należy ustawić tryb na odczyt i zapis (więc drugi argument powinien być równy "true").

Zauważmy, że użyty dokument powinien być zamknięty (nie może być aktualnie otworzony przez żadną inną aplikację (np. przez edytor Word), w przeciwnym razie otrzymamy wyjątek typu: System.IO.IOException ("The process cannot access the file XXX.docx' because it is being used by another process.").

Kolejną czynnością jaką musimy wykonać jest dodanie nowego paragra fu na końcu "body" modyfikowanego dokumentu (element: myWordprocessingDocument.MainDocumentPart.Document.Body)

Ostatnim krokiem jest zapis zamodyfikowanego dokumentu (mainDocumentPart.Document.Save();)

Proste, prawda?

Ostatecznie otrzymany kodu modyfikujący dokument może wyglądać następująco:

//Selecting a file
OpenFileDialog myopenFileDialog = new OpenFileDialog();
myopenFileDialog.Filter = "Word 2007 file (DOCX)|*.docx";
if ( myopenFileDialog.ShowDialog() == DialogResult.OK )
{
  //Open and manipulate docx
  using ( WordprocessingDocument myDoc = WordprocessingDocument.Open( myopenFileDialog.FileName, true ) )
  {
    //Access main part of document. 
    MainDocumentPart mainDocumentPart = myDoc.MainDocumentPart;
    //Creation of the new "hello world" paragraph
    Paragraph newelloWorldParagraph = CreateAndReturnHelloWorldParagraph();
    //Add new paragraph at the end of document body
    mainDocumentPart.Document.Body.Append( newelloWorldParagraph );
    //save the document
    mainDocumentPart.Document.Save();
  }
}
Promuj kick it on DotNetKicks.com(English version)Shout it(English version)

Brak komentarzy:

Prześlij komentarz

Posty powiązane / Related posts