Spis treści:

Kategoria:C#WordXML


Tworzenie dokumentu Word XML w C# - II

W poprzednim wpisie (Tworzenie dokumentu Word w C# - I) pokazałem, w jaki sposób skorzystać z komponentów COM i przy ich udziale wygenerować dokument WORD. Wspomniałem też, że nie jest to jedyny sposób generowania takich dokumentów. To, co pokażę, znane jest równeż pod nazwą WordML.

XML, XML, wszędzie XML

XML pojawił się dawno temu i, trzeba przyznać, wszedł niepostrzeżenie w niemal każdy obszar informatyzacji. Niektórzy pewnie już zauważyli, że w opcji "Zapisz" jako format pliku można wskazać coś takiego jak "Dokument XML programu Word" lub "Dokument XML programu Word 2003". Czym jest ten format? Jeżeli ktoś pomyślał, że plikiem XML - ma rację. Teoretycznie każdy dokument binarny da się wyrazić za pomocą odpowiednika w postaci XML - wszak to tylko format. Pozostaje jedynie kwestia narzutu. Teoria teorią, a w praktyce? Zaskakujące jest to, że to niewyobrażalne zjawisko ma miejsce na naszych oczach. Co więcej - dokument z rozszerzeniem *.docx to nic innego jak... archiwum zip. A co w tym archiwum? Kilkanaście plików xml! Aby się o tym przekonać wystarczy stworzyć plik Word, zapisać go jako docx, przejść do miejsca, w którym go zapisaliśmy i zmienić rozszerzenie z *.docx na *.zip. Teraz wystarczy otworzyć ten plik dowolną aplikacją zdolną do otwierania skompresowanych plików *.zip! Polecam przejrzeć te pliki, rzucić okiem na strukturę i zawartość. To jest właśnie ta XML-owa strona plików Word!

Nie jest to jednak ta sama twarz, którą ja pokażę. W pliku *.docx, oprócz tego, co sami wprowadziliśmy w dokumencie, znajduje się mnóstwo niepotrzebnych informacji! Czy to wszystko jest nam potrzebne, aby utworzyć dokument? Nie!

Przykład prostego dokumentu Word w postaci XML

Prosty dokument Word może przypominać prostą stronę HTML. Jako fundament należy przyjąć następujące założenia:

  1. Elementy XML dokumentu umieszczone są w przestrzeni nazw http://schemas.microsoft.com/office/word/2003/wordml.
  2. Głównym elementem jest wordDocument.
  3. Ciało dokumentu umieszczone jest w znaczniku body.
.

Przyjrzyjmy się temu prostemu schamatowi zaprezentowanemu na poniższym listingu:

<?xml version="1.0"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
    <w:body>

    </w:body>
</w:wordDocument>

To już pełnoprawny dokument Word! Można go otworzyć i sprawdzić, że jest pusty. Tworzenie "prawdziwego" dokumentu polega, w skrócie, na odpowiednim uzupełnieniu tego wzorca. Tylko jak?

A gdzie tekst?

Tworzenie pustych dokumentów to nie to, czego oczekujemy. Gdzie wstawić tekst? Jedną z podstawowych części dokumentu Word są paragrafy. To też pewnego rodzaju odpowiednik znacznika <p> w HTML. Jak wstawić paragraf? W postaci znacznika, a jakże, p.

<?xml version="1.0"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
    <w:body>
        <w:p>

        </w:p>
    </w:body>
</w:wordDocument>

Pusty paragraf niczego nam nie daje. Wszak dokument nadal jest pusty! W elemencie paragrafu wstawiamy elementy r (ang. run). Są to, tak bez zagłębiania się w szczegóły, bloki o jednolitym formatowaniu. O co dokładniej chodzi napiszę w jednej z kolejnych części. Dokładamy więc do naszego przykładu kolejny poziom:

<?xml version="1.0"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
    <w:body>
        <w:p>
            <w:r>

            </w:r>
        </w:p>
    </w:body>
</w:wordDocument>

To już prawie koniec. Teraz wystarczy tylko wstawić znacznik tekstowy t (ang. text), a w nim umieścić wymarzony tekst. Tak na marginesie: znajomość angielskiego bardzo się przydaje, bo, jak się wkrótce okaże, liczba znaczników jest ogromna, i przerasta zdolności zapamiętywania zwykłego człowieka. Dzięki skojarzeniom angielskich odpowiedników jest, może nie łatwo, a łatwiej. Przyjrzyjmy się jeszcze koncowemu rezultatowi pokazanemu poniżej:

<?xml version="1.0"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
    <w:body>
        <w:p>
            <w:r>
                <w:t>Hello Word!</w:t>
            </w:r>
        </w:p>
    </w:body>
</w:wordDocument>

Po zapisaniu tego pliku z rozszerzeniem *.xml i otwarciu go, powinniśmy ujrzeć zwykły, czarny napis Hello Word!. Napis bez stylu, bez formatowania, bez polotu. Polot będzie, jak opanujemy podstawy.

Zdarza się, że w systemie istnieje inna aplikacja skojarzona z rozszerzeniem *.xml i dwukrotne kliknięcie na pliku nie spowoduje otwarcia tego pliku przez aplikację WINWORD.exe. Zawsze można otworzyć pusty dokument, pochwycić ikonę utworzonego pliku i upuścić na pasku tytułowym aplikacji WINWORD.exe.

Podsumowanie

Istnieją dwie alternatywne metody tworzenia dokumentów Word - COM i XML. Mają one swoje wady i zalety. Poznamy je lepiej, gdy zaczniemy tworzyć coś bardziej skomplikowanego. Dla zwykłych dokumentów z prostym tekstem lepszy wydaje się XML, bo nie wymaga zaprzęgania całej infrastruktury COM, uruchamiania komponentu wykonywalnegoCOM obsługuje również komponenty wewnątrzprocesowe, które ładowane są do przestrzeni adresowej wywołującego je procesu. Wspólna przestrzeń adresowa sprawia, że wymiana danych jest sprawniejsza. Word jest komponentem wykonywalnym. Oznacza to, że jest urochamiany jako całkowicie oddzielny proces, z oddzielną przestrzenią adresową., konwersji pomiędzy typami COM i .NET.

Kategoria:C#WordXML

, 2013-12-20

Brak komentarzy - bądź pierwszy

Dodaj komentarz
Wyślij
Ostatnie komentarze
Dzieki za rozjasnienie zagadnienia upsert. wlasnie sie ucze programowania :).
Co się stanie gdy spróbuję wyszukać:
SELECT * FROM NV_Airport WHERE Code='SVO'
SELECT * FROM V_Airport WHERE Code=N'SVO'
(odwrotnie są te N-ki)
Będzie konwersja czy nie znajdzie żadnego rekordu?