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(); } }(English version)(English version)
Brak komentarzy:
Prześlij komentarz