Żyjemy w świecie, z którym programiści PHP muszą wchodzić w interakcje system operacyjny Okna. WMI (interfejs zarządzania Windows) Kontrolki systemu Windows) - jednym z takich przykładów jest interakcja z pakietem Microsoft Office.

W tym artykule przyjrzymy się prostej integracji między Wordem i PHP: generowanie dokumentu Microsoft Word na podstawie pól wejściowych w formularzu HTML przy użyciu PHP (i jego rozszerzenia Interop).

Kroki przygotowawcze

Przede wszystkim upewnijmy się, że mamy skonfigurowane podstawowe środowisko WAMP. Ponieważ Interop jest dostępny tylko w systemie Windows, potrzebujemy naszego Serwer Apache a instalacja PHP została wdrożona do Maszyna z systemem Windows. W związku z tym używam EasyPHP 14.1, który jest niezwykle łatwy w instalacji i konfiguracji.

Następnym krokiem jest zainstalowanie pakietu Microsoft Office. Wersja nie jest bardzo ważna. Używam pakietu Microsoft Office 2013 Pro, ale każda wersja pakietu Office starsza niż 2007 powinna działać.

Musimy również upewnić się, że zainstalowaliśmy biblioteki do tworzenia aplikacji Interop (PIA, Primary Interop Assemblies, Primary Interop Assemblies). Możesz się tego dowiedzieć, otwierając Eksploratora Windows i przechodząc do katalogu \assembly , a tam powinniśmy zobaczyć zestaw zainstalowanych zestawów:

Tutaj możesz zobaczyć element Microsoft.Office.Interop.Word (podkreślony na zrzucie ekranu). To będzie kompilacja, której użyjemy w naszym demo. Zwróć szczególną uwagę na pola „Nazwa zespołu”, „Wersja” i „Token klucza publicznego”. Niedługo wykorzystamy je w naszym skrypcie PHP.

Ten katalog zawiera również inne zestawy (w tym całą rodzinę Office) dostępne do wykorzystania w ich programach (nie tylko dla PHP, ale także dla VB.net, C# itp.).

Jeśli lista zestawów nie zawiera całego pakietu Microsoft.Office.Interop, musimy albo ponownie zainstalować pakiet Office, dodając PIA, albo ręcznie pobrać pakiet z witryny firmy Microsoft i zainstalować go. Zobacz tę stronę MSDN, aby uzyskać bardziej szczegółowe instrukcje.

Komentarz Uwaga: Do pobrania i instalacji dostępna jest tylko dystrybucja Microsoft Office 2010 PIA.Wersja zestawu w tym pakiecie to 14.0.0, a wersja 15 jest dostarczana tylko z Office 2013.

Na koniec musisz włączyć rozszerzenie php_com_dotnet.dll w php.ini i zrestartować serwer.

Teraz możemy przejść do programowania.

Formularz HTML

Ponieważ główna część tego przykładu przypada po stronie serwera, stworzymy prostą stronę z formularzem, który będzie wyglądał tak:

Mamy pole tekstowe na imię, grupę przycisków radiowych na płeć, suwak na wiek i pole tekstowe do wpisywania wiadomości, a także niesławny przycisk „Prześlij”.

Zapisz ten plik jako „index.html” w katalogu hosta wirtualnego, aby można było uzyskać do niego dostęp pod adresem URL, takim jak http://test/test/interop .

Część serwerowa

Plik obsługi po stronie serwera jest głównym celem naszej rozmowy. Najpierw podam kompletny kod do tego pliku, a następnie wyjaśnię go krok po kroku.

widoczne = prawda; $fn = __KATALOG__ . "\\szablon.docx"; $d = $w->Dokumenty->Otwórz($fn); echo "Dokument jest otwarty.


"; $flds = $d->Pola; $liczba = $flds->Liczba; echo "Dokument zawiera $liczba pól.
"; Echo "
    "; $mapping = setupfields(); foreach ($flds as $index => $f) ( $f->Select(); $key = $mapping[$index]; $value = $inputs[$key]; if ($klucz == "płeć") ( if ($wartość == "(!LANG:m") $value = "Pan."; else $value = "SM."; } if($key=="printdate") $value= date ("Y-m-d H:i:s"); $w->Selection->TypeText($value); echo "!}
  • Przypisywanie indeksu $: $klucz do $wartości
  • "; ) Echo "
"; echo "Przetwarzanie zakończone!

"; echo "Drukowanie, proszę czekać...
"; $d->PrintOut(); sleep(3); echo "Gotowe!"; $w->Quit(false); $w=null; function setupfields() ( $mapping = array(); $mapping = "płeć"; $mapping = "imię"; $mapping = "wiek"; $mapping = "msg"; $mapping = "data wydruku"; return $mapping; )

Po wpisaniu wartości otrzymanych z formularza do zmiennej $inputs, a także utworzeniu pustego elementu z kluczem printdate (dlaczego to zrobiliśmy - omówimy później), przechodzimy do czterech bardzo ważnych wierszy:

$assembly = "Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"; $class = "Microsoft.Office.Interop.Word.ApplicationClass"; $w = new DOTNET($zespół, $klasa); $w->widoczne = prawda;

Manipulator COM w PHP wymaga utworzenia instancji klasy w "zestawie". W naszym przypadku pracujemy z Wordem. Jeśli spojrzysz na pierwszy zrzut ekranu, możesz zapisać pełną sygnaturę zestawu dla programu Word:

  • „Nazwa”, „Wersja”, „Token klucza publicznego” są pobierane z informacji, które można wyświetlić w „c:\Windows\assembly”.
  • „Kultura” jest zawsze neutralna

Klasa, do której chcemy się odwoływać, ma zawsze nazwę „nazwa zestawu” + „.ApplicationClass”.

Ustawiając te dwa parametry, możemy sprawić, że obiekt będzie współpracował z Wordem.

Ten obiekt może pozostać w tle lub możemy wprowadzić go do produkcji, ustawiając atrybut visible na true .

Następnym krokiem jest otwarcie dokumentu do przetworzenia i zapisanie instancji „dokumentu” do zmiennej $d .

Istnieje kilka sposobów tworzenia w dokumencie zawartości opartej na formularzu.

Najgorsze, co można zrobić, to zakodować zawartość dokumentu w PHP, a następnie wyprowadzić ją do dokumentu Worda. Zdecydowanie odradzam robienie tego z następujących powodów:

  1. Tracisz elastyczność. Wszelkie zmiany w pliku wyjściowym będą wymagały zmian w kodzie PHP.
  2. To łamie rozdział kontroli i widoku
  3. Stosowanie stylów do treści dokumentu (wyrównanie, czcionki, style itp.) w skrypcie znacznie zwiększy liczbę wierszy kodu. Programowa zmiana stylów jest zbyt uciążliwa.

Inną opcją byłoby użycie funkcji Znajdź i zamień. PHP ma do tego dobre wbudowane narzędzia. Możemy stworzyć dokument Word, w którym umieszczamy etykiety ze specjalnymi separatorami, które później zostaną zastąpione. Na przykład możemy stworzyć dokument, który będzie zawierał następujący fragment:

a przy pomocy PHP w prosty sposób możemy go zastąpić zawartością pola „Nazwa” otrzymaną z formularza.

Jest to proste i chroni nas przed wszystkimi nieprzyjemnymi konsekwencjami, jakie napotykamy w pierwszej metodzie. Musimy tylko zdecydować się na właściwy ogranicznik, w takim przypadku korzystamy z wzorca.

Polecam trzecią metodę, która opiera się na głębszej znajomości Słowa. Wykorzystamy pola jako symbole zastępcze, a za pomocą kodu PHP bezpośrednio zaktualizujemy wartości w polach o odpowiadające im wartości.

Takie podejście jest elastyczne, szybkie i zgodne z najlepszymi praktykami programu Word. Dzięki niemu można również uniknąć wyszukiwania pełnotekstowego w dokumencie, co ma dobry wpływ na wydajność. Zauważ, że to rozwiązanie ma również wady.

Word od samego początku nie obsługiwał indeksów nazwanych dla pól. Nawet jeśli określiliśmy nazwy dla tworzonych pól, nadal musimy używać numerycznych identyfikatorów tych pól. Wyjaśnia to również, dlaczego musimy użyć oddzielnej funkcji (setupfields), aby dopasować indeks pola i nazwę pola z formularza.

W tym demo użyjemy dokumentu z 5 polami MERGEFIELD. Umieścimy dokument szablonu w tym samym miejscu, co nasz program obsługi skryptów.

Należy pamiętać, że pole data wydruku nie ma odpowiadającego pola w formularzu. Dlatego dodaliśmy pusty element printdate do tablicy $inputs. Bez tego skrypt nadal będzie działał, ale PHP wyświetli ostrzeżenie, że w tablicy $inputs brakuje indeksu printdate.

Po zastąpieniu pól nowymi wartościami drukujemy dokument za pomocą

$d->Wydruk();

Metoda PrintOut przyjmuje kilka opcjonalnych parametrów i używamy jej najprostszej formy. Spowoduje to wydrukowanie jednej kopii dokumentu na domyślnej drukarce podłączonej do komputera z systemem Windows.

Możesz również wywołać PrintPreview, aby zobaczyć wynik przed jego wydrukowaniem. W całkowicie zautomatyzowanym środowisku będziemy oczywiście korzystać z metody PrintOut.

Musisz chwilę poczekać, zanim zamkniesz aplikację Word, ponieważ kolejkowanie zadania drukowania zajmuje trochę czasu. Bez opóźnienia(3), metoda $w->Quit jest wykonywana natychmiast, a zadanie nie jest umieszczane w kolejce.

Na koniec wywołujemy $w->Quit(false) , co zamyka aplikację Word, która została wywołana przez nasz skrypt. Jedynym parametrem przekazywanym do metody jest zapisanie pliku przed zakończeniem. Wprowadziliśmy zmiany w dokumencie, ale nie chcemy ich zapisywać, ponieważ potrzebujemy czystego szablonu do późniejszej pracy.

Gdy skończymy z kodem, możemy załadować naszą stronę formularza, wpisać kilka wartości i przesłać go. Poniższe obrazy przedstawiają dane wyjściowe skryptu oraz zaktualizowany dokument programu Word:

Poprawiona szybkość przetwarzania i trochę więcej o PIA

PHP to luźno typowany język. Obiekt COM typu Object . Podczas pisania skryptu nie mamy możliwości uzyskania opisu obiektu, czy to aplikacji Word, dokumentu, czy pola. Nie wiemy, jakie właściwości ma ten obiekt, ani jakie metody obsługuje.

To znacznie spowolni tempo rozwoju. Aby przyspieszyć rozwój, polecam najpierw napisać funkcje w C#, a następnie przetłumaczyć kod na PHP. Mogę polecić darmowe IDE do programowania w C# o nazwie „#develop”. Możesz ją znaleźć. Wolę go od Visual Studio, ponieważ #develop jest mniejszy, łatwiejszy i szybszy.

Migracja kodu C# do PHP nie jest tak przerażająca, jak się wydaje. Pokażę ci kilka linijek w C#:

Słowo.Aplikacja w=nowy Słowo.Aplikacja(); w.Widoczny=prawda; String path=Aplikacja.StartupPath+"\\template.docx"; Word.Document d=w.Documents.Open(ścieżka) jako Word.Document; Word.Fields flds=d.Fields; intlen=flds.Liczba; foreach (Word.Field f w flds) ( f.Select(); int i=f.Index; w.Selection.TypeText("..."); )

Widać, że kod C# jest bardzo podobny do kodu PHP, który pokazałem wcześniej. C# jest językiem silnie typizowanym, więc w tym przykładzie widać kilka operatorów rzutowania, a także trzeba określić typ dla zmiennych.

Określając typ zmiennej, możesz cieszyć się wyraźniejszym kodem i automatycznym uzupełnianiem, a szybkość tworzenia jest znacznie zwiększona.

Innym sposobem na przyspieszenie rozwoju PHP jest wywołanie makra w programie Word. Wykonujemy tę samą sekwencję działań, a następnie zapisujemy ją jako makro. Makro zostało napisane w języku Visual Basic, który również można łatwo przetłumaczyć na PHP.

A co najważniejsze, dokumentacja Microsoft Office PIA, zwłaszcza dokumentacja przestrzeni nazw każdej aplikacji Office, jest najbardziej szczegółowym odniesieniem. Najczęściej używane trzy aplikacje to:

  • Excel 2013: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel(v=office.15).aspx
  • Word 2013: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word(v=office.15).aspx
  • PowerPoint 2013: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint(v=office.15).aspx

Wniosek

W tym artykule pokazaliśmy, jak wypełnić dokument Worda danymi przy użyciu bibliotek PHP COM i współdziałania Microsoft Office.

Windows i Office są szeroko stosowane w życiu codziennym. Znajomość możliwości Office/Window i PHP przyda się każdemu programiście PHP i Windows.

Rozszerzenie PHP COM otwiera drzwi do korzystania z tej kombinacji.

Kontynuujemy rozpoczęty wcześniej temat pracy z formularzami w programie Word. W poprzednich artykułach przyglądaliśmy się formularzom tylko z perspektywy „zaawansowanego użytkownika”, tj. stworzyliśmy dokumenty, które są wygodne do ręcznego wypełniania. Dziś chciałbym zaproponować rozszerzenie tego zadania i próbę wykorzystania mechanizmu kontroli treści do generowania dokumentów.

Zanim przejdziemy do naszego bezpośredniego zadania, chciałbym powiedzieć kilka słów o tym, jak dane do kontroli treści są przechowywane w dokumentach Word (celowo pominę na razie sposób ich powiązania z treścią dokumentu, ale mam nadzieję, że wrócę do tego kiedyś w następnych artykułach).

Uzasadnione pytanie brzmi: itemProps1.xml i podobne komponenty? Te komponenty przechowują opisy źródeł danych. Najprawdopodobniej, zgodnie z zamysłem deweloperów, oprócz osadzonych w dokumencie plików xml, miał on korzystać z innych, ale do tej pory tylko ta metoda została zaimplementowana.

Co jest dla nas przydatne itemPropsX.xml? Fakt, że wymieniają schematy xml (ich targetNamespace) które są używane w rodzicu itemX.xml. Oznacza to, że jeśli w dokumencie zawarliśmy więcej niż jeden niestandardowy xml, to aby znaleźć właściwy, musimy przejrzeć itemPropsX.xml komponenty i znajdź żądany obwód, a zatem pożądany itemX.xml.

Teraz jeszcze jedna chwila. Nie będziemy ręcznie analizować relacji między komponentami i szukać właściwych, korzystając tylko z podstawowego API Packaging! Zamiast tego użyjemy Open XML SDK (jego kompilacje są dostępne za pośrednictwem NuGet). Oczywiście nie powiedzieliśmy wcześniej ani słowa o tym API, ale do naszego zadania wymaga to minimum, a cały kod będzie dość przejrzysty.

Cóż, główne wprowadzenie jest zrobione, możesz przejść do przykładu.

Zgodnie z ustaloną tradycją weźmiemy ten sam „Raport ze spotkania”, który narysowaliśmy w artykule. Przypomnę, że tak wyglądał szablon dokumentu:

A więc XML, z którym powiązane były pola dokumentu

< meetingNotes xmlns ="urn:MeetingNotes" subject ="" date ="" secretary ="" > < participants > < participant name ="" /> < decisions > < decision problem ="" solution ="" responsible ="" controlDate ="" />

Krok 1. Utwórz model danych

Właściwie naszym zadaniem nie jest tylko wygenerowanie dokumentu, ale stworzenie (przynajmniej w wersji roboczej) wygodnego narzędzia do wykorzystania zarówno przez programistę, jak i użytkownika.

Dlatego zadeklarujemy model jako strukturę klas C#:

Klasa publiczna MeetingNotes ( public MeetingNotes() ( Uczestnicy = nowa lista (); Decyzje = nowa lista (); ) ciąg publiczny Subject ( get; set; ) public DateTime Date ( get; set; ) ciąg publiczny Secretary ( get; set; ) public List Uczestnicy ( get; set; ) lista publiczna Decyzje ( get; set; ) ) public class Decision ( public string Problem ( get; set; ) public string Solution ( get; set; ) public string Responsible ( get; set; ) public DateTime ControlDate ( get; set; ) ) public class Uczestnik ( public string Nazwa ( get; set; ) )

Ogólnie rzecz biorąc, nic specjalnego, z wyjątkiem tego, że dodano atrybuty do sterowania serializacją XML (ponieważ nazwy w modelu i wymagany kod XML są nieco inne).

Krok 2: Serializuj powyższy model do XML

Zadanie jest w zasadzie banalne. To, co nazywa się „weź nasz ulubiony XmlSerializer i idź”, jeśli nie dla jednego? ale

Niestety, w obecna wersja Office najwyraźniej jest błąd, który wygląda następująco: jeśli w niestandardowym xml zanim deklarując główną przestrzeń nazw (tą, z której Word powinien pobierać elementy do wyświetlenia), zadeklaruj trochę więcej, wtedy powtarzające się kontrolki Content zaczynają się wyświetlać niepoprawnie (tylko tyle elementów jest pokazywanych, ile było w samym szablonie - tj. powtarzająca się sekcja nie praca ).

Tych. Oto xml, który działa:

< test xmlns ="urn:Test" attr1 ="1" attr2 ="2" > < repeatedTag attr ="1" /> < repeatedTag attr ="2" /> < repeatedTag attr ="3" />

i ten też:

< test xmlns ="urn:Test" attr1 ="1" attr2 ="2" xmlns:t ="urn:TTT" > < repeatedTag attr ="1" /> < repeatedTag attr ="2" /> < repeatedTag attr ="3" />

a tego już nie ma:

< test xmlns:t ="urn:TTT" xmlns ="urn:Test" attr1 ="1" attr2 ="2" > < repeatedTag attr ="1" /> < repeatedTag attr ="2" /> < repeatedTag attr ="3" />

Próbowałem zgłosić błąd do pomocy technicznej firmy Microsoft na Connect , ale z jakiegoś powodu odmówiono mi dostępu do zgłaszania błędów za pośrednictwem pakietu Office. Nie pomogła też dyskusja na forum MSDN.

Ogólnie rzecz biorąc, niezbędny manewr objazdu. Gdybyśmy sami tworzyli XML, nie byłoby problemów - wszystko zrobilibyśmy sami. Jednak w tym przypadku naprawdę chcę użyć standardowego XmlSerializer, który domyślnie dodaje kilka swoich przestrzeni nazw do wyjściowego XML, nawet jeśli te przestrzenie nazw nie są używane.

Zrobimy całkowite pominięcie danych wyjściowych naszych własnych przestrzeni nazw w XmlSerializer. To prawda, że ​​to podejście zadziała tylko wtedy, gdy naprawdę ich nie potrzebuje (w przeciwnym razie nadal będą dodawane i tylko PRZED naszymi).

Właściwie cały kod (pod warunkiem, że zmienna notatki ze spotkania zawiera wcześniej wypełniony obiekt typu MeetingNotes):

var serializer = new XmlSerializer(typeof (MeetingNotes));
var serializedDataStream = new MemoryStream();

var namespaces = new XmlSerializerNamespaces();
przestrzenie nazw.Dodaj(„” , „” );

serializer.Serialize(serializedDataStream, meetingNotes, przestrzenie nazw);
serializedDataStream.Seek(0, SeekOrigin.Begin);

Krok 3. Wprowadzamy wynikowy XML do dokumentu Word.

Tutaj wykonujemy następujące czynności:

  • skopiuj szablon i otwórz kopię
  • znajdź w nim żądany niestandardowy plik xml (szukaj według przestrzeni nazw „urna: Notatki ze spotkania”)
  • zastępujemy zawartość komponentu naszym XML

File.Copy(nazwa szablonu, nazwadokumentu wynikowego, prawda ); using (var document = WordprocessingDocument.Open(resultDocumentName, true )) ( var xmlpart = document.MainDocumentPart.CustomXmlParts .Single(xmlPart => xmlPart.CustomXmlPropertiesPart.DataStoreItem.SchemaReferences.OfType () .Any(sr => sr.Uri.Value == "(!LANG:urn:MeetingNotes"!}

Wszyscy mamy do czynienia z tekstami w taki czy inny sposób. Czasem jest potrzeba wygenerowania dużej lub niezbyt dużej ilości tekstu do jakiegoś zadania, na przykład pobawić się formatowaniem, ale tekstu nie ma pod ręką, jest zbyt leniwy, żeby napisać go samemu. Co robić? Odpowiedź jest prosta: użyj wbudowanego generatora tekstu losowego w programie Word!

W edytorze Microsoft Word możesz szybko i łatwo generować tekst za pomocą specjalnych poleceń. Jako królika doświadczalnego użyję programu Word 2007. Te polecenia powinny działać we wszystkich wersjach programu Word. Opowiem Ci o trzech metodach generowania tekstu.

Metoda 1: za pomocą rand()

Funkcja rand() wstawia zlokalizowaną próbkę tekstu, 3 akapity po 3 zdania. Otwórz swoje słowo, umieść kursor w miejscu, w którym wkrótce pojawi się tekst i wprowadź polecenie:

i naciśnij Enter. Sama funkcja rand zniknie, a zamiast niej pojawią się 3 akapity tekstu:

Ale to nie wszystko. Jeśli potrzebujesz dużo tekstu, możesz użyć funkcji rand z dodatkowymi argumentami, takimi jak:

=rand(x,y)

gdzie " x' oznacza liczbę akapitów, a ' tak» to liczba zdań w każdym akapicie. Na przykład, =rand(20,5) wstawi 20 akapitów po pięć fraz każdy. ALE =rand(7) wstawi 7 akapitów po 3 zdania.

Metoda 2: Używanie lorem()

Aby wstawić stary dobry Lorem Ipsum jako próbkę - użyj funkcji lorem (). Wpisz następujące polecenie i naciśnij Enter:

I dostajemy ten całkowicie łaciński tekst

Funkcja lorem() również chętnie przyjmuje dodatkowe argumenty, takie jak rand(), w postaci kilku akapitów i zdań. Bez argumentów funkcja wstawia domyślnie 3 akapity po 3 zdania każdy.

Metoda 3. Funkcja rand.old()

Użycie jest podobne do poprzednich poleceń:

=rand.stary()

i naciśnij Enter.

Funkcja rand.old() została pozostawiona dla kompatybilności ze starym biurem, do roku 2003 włącznie. Sposób aplikacji jest taki sam jak w poprzednich dwóch, tylko tekst będzie składał się z tych samych zwrotów „Jedz więcej tych miękkich francuskich bułek i pij herbatę”. To zdanie jest znane każdemu, kto czasami musiał pracować z czcionkami.

Możesz przekazywać argumenty jak w pierwszych dwóch metodach.

To wszystko, teksty zostały wygenerowane, teraz możesz jeść więcej tych miękkich francuskich bułek i pić herbatę :)

Czy udało Ci się wstawić tekst za pomocą powyższych funkcji?

Kiedyś, po podsumowaniu wyników olimpiady, gdy uczestnicy musieli rozesłać listy z wynikami zaliczonych (lub nie zaliczonych) przedmiotów, zauważyłem, że dziewczyna siedzi i wpisuje wyniki egzaminu, imię ucznia i inne informacje do szablonu listu rękami. Przed nią leżało kilka arkuszy wydrukowanych z Excela z nazwiskami i ocenami. Kopiuj-wklej, Ctrl + C - Ctrl + V, przenosząc pełną nazwę z mianownika do dopełniacza, więc praca została już wykonana z połową pierwszego z trzech arkuszy danych. Jak myślisz, jak długo mogłaby siedzieć i kopiować dane, a potem sprawdzać wynik? Myślę, że przez długi czas i byłoby sporo błędów. Ale potem musiała jeszcze podpisywać koperty pocztowe… Żal mi jej czasu i w kilka minut pokazałem, jak można ten proces zautomatyzować za pomocą prostych środków. Po krótkiej wycieczce jej praca została ukończona w 20 minut.

W tej lekcji pokażę Ci, jak szybko tworzyć dokumenty (listy, zaproszenia) przy minimalnym czasie. W różne wersje języki, ten opisany proces nazywa się inaczej. Tak więc w języku rosyjskim jest to „Merge”, a po angielsku - „Merge”.

Mam nadzieję, że "listy szczęścia" od Fundusz emerytalny, deklaracje podatkowe są tworzone w ten sam sposób :)

Narzędzia

Do tworzenia dokumentów potrzebujemy OpenOffice Writera. W nim stworzymy szablon listu. Będziesz także potrzebował OpenOffice Calc. W nim stworzymy bazę danych z nazwiskami i adresami tych osób, które np. chcemy zaprosić na imprezę. Zamiast programów z pakietu OpenOffice można bez problemu korzystać z MS Word i Excel. Baza danych może łatwo leżeć w MS Access. A więc zacznijmy.

Tworzenie bazy danych

Baza danych to nic innego jak tabela w MS Excel lub OpenOffice Calc, gdzie dane są ułożone w kolumny, a pierwszy wiersz służy do nazwania kolumn. Zacznijmy na przykład od kolumn „nazwa”, „miasto”, „kod pocztowy”, „adres”. Wprowadź dane i zapisz plik na dysku.



Jako bazy danych można również wykorzystać inne źródła, takie jak książka adresowa programu Outlook lub baza danych MS Access.

Utwórz szablon listu

Po stworzeniu szablonu listu sytuacja nieco się komplikuje. Ponieważ dane z tabeli (nasza baza danych) zostaną podstawione do szablonu tak jak jest, to pismo należy odpowiednio napisać. Jeśli Twoje imię i nazwisko znajduje się w mianowniku w Twojej bazie danych, prawdopodobnie nie będziesz mógł użyć tego pola w odwołaniu „Szanowni Państwo,<ФИО>!" a dla koperty w wierszu „Do:<ФИО>”. W tym drugim przypadku pełna nazwa będzie wyglądać nieco niezdarnie.

Tworząc szablon listu, polecam zacząć od napisania listu do kogoś prawdziwa osoba. Możesz sobie. Następnie zaznacz w nim dane, które pobierzesz z bazy i zastąp je odpowiednimi polami. Przed zamianą zaznaczonego tekstu na pole polecam zwrócić uwagę od jakiej litery powinno zaczynać się pole w bazie danych (małą czy wielką literą). Oczywiście możesz utworzyć szablon od razu z polami, ale wtedy możesz nie zauważyć pewnych błędów, takich jak niespójności w przypadkach.



Już w powyższym szablonie widać, że potrzebujemy pełnego imienia w dopełniaczu oraz pola zawierającego tylko imię i drugie imię. Przy pierwszym polu możemy zamienić „Do” na „Odbiorca” i wtedy pełna nazwa w mianowniku będzie nam idealnie pasować. Z drugim polem wszystko jest nieco bardziej skomplikowane i będziemy musieli stworzyć kolejną kolumnę w bazie danych i wypełnić ją odpowiednimi danymi. W jednej z kolejnych lekcji opowiem Ci, jak to zrobić automatycznie, ale na razie założymy, że takie pole już mamy.

Aby wstawić pole i powiązać szablon z bazą danych, należy wykonać następującą sekwencję czynności. Wybierz bazę danych w OpenOffice Writer



i kliknij "Definiuj".



Następnie wstaw pole z podłączonej bazy danych w odpowiednim miejscu. Aby to zrobić, naciśnij Ctrl + F2 lub wybierz „Pola” i „Inne” z menu „Wstaw”. W oknie, które zostanie otwarte, wybierz zakładkę "Bazy danych", wybierz "Pola korespondencji seryjnej" w typie pola, wybierz odpowiednie pole z bazy danych i kliknij "Wstaw". W tym oknie można również wybrać samą bazę danych.



Po wstawieniu jednego pola, bez zamykania bieżącego okna, zaznacz tekst, który ma zostać zastąpiony przez następne pole, zaznacz pole i ponownie kliknij „Wstaw”. I tak dla każdego z pól.

W przypadku MS Word sytuacja jest nieco podobna i być może wygodniejsza. Po utworzeniu tabeli w MS Excel uruchom MS Word i przejdź do zakładki „Mailouty”. Na tej karcie możesz zobaczyć trzy niezbędne kroki: „Rozpocznij scalanie”, „Skomponuj dokument i wstaw pola” oraz „Ukończ”. Istnieje również krok pośredni „Wyświetl wynik”, ale jest on opcjonalny.

I tak praca zaczyna się od wyboru dokumentu. Mogą to być listy, naklejki, zwykły dokument Worda. Tutaj możesz również uruchomić kreatora scalania, który poprowadzi Cię przez wszystkie etapy procesu. Kolejnym krokiem jest wybór odbiorcy, czyli bazy danych. Tutaj możesz wybrać gotową bazę danych (na przykład tabelę MS Excel utworzoną na poprzednim etapie) lub utworzyć nową listę. Po wybraniu listy uaktywniają się przyciski „Wstaw pole korespondencji seryjnej”, „Edytuj listę odbiorców” itp. Poprzez okno dialogowe „Edytuj listę odbiorców”, które otwiera się za pomocą odpowiedniego przycisku, z całej listy można wybrać tylko rekordy niezbędne do połączenia.







Podczas wstawiania pól wygodnie jest podświetlić wszystkie pola na szaro, klikając przycisk „Wybierz pola scalające”. W przeciwnym razie, jeśli jest wiele takich pól, mogą one zostać utracone w tekście.

I tak szablon jest gotowy.

Generowanie listów

Ostatnim etapem jest generowanie listów. W OpenOffice w tym celu w menu "Narzędzia" wybierz "Kreator korespondencji seryjnej..." i przejdź przez wszystkie proponowane kroki, aby połączyć nasz szablon z bazą danych.





W oknie dialogowym widzimy, że spośród proponowanych 8 punktów nie musimy wykonywać niektórych punktów. Czyli już stworzyliśmy dokument i nie musimy go edytować, wstawiliśmy już również blok adresowy. Ale chodźmy w porządku.

Najpierw wybieramy, że tworzymy listy na podstawie bieżącego dokumentu i klikamy „Dalej” na dole okna. Druga kwestia dotyczy tego, czy będziemy mieli ten list papierowy, czy e-mail. Aby list został zapisany do pliku, wybierz pierwszy. Kliknij Następny". W trzecim akapicie proponujemy utworzenie bloku adresu, ale ponieważ utworzyliśmy go ręcznie, odznaczamy wszystkie pola i przechodzimy do następnego kroku. Tutaj proponujemy wstawić odwołanie, ale już je mamy, więc kliknij „Dalej”. W szóstym akapicie możesz edytować dokument, spojrzeć na dokument z polami wstawionymi z bazy danych i, jeśli to konieczne, wykluczyć niektóre pola.



W kroku 7 proponuje się edycję każdego z plików powstałych w wyniku połączenia szablonu z bazą danych. I na koniec, w ostatnim kroku 8, możesz wybrać, co zrobić z otrzymanymi dokumentami. Możesz zapisać, wydrukować lub wysłać e-mailem. W takim przypadku możesz zapisać wszystkie dokumenty w jednym pliku lub każdy dokument osobno.

W MS Word proces scalania kończy się, klikając przycisk „Znajdź i połącz”.



Z rozwijanego menu widać, że wszystkie listy można wydrukować i wysłać e-mailem, ale nie jest oczywiste, że wszystkie można zapisać do pliku. Aby zapisać, wybierz pierwszą pozycję - "Zmień poszczególne dokumenty". Spowoduje to otwarcie nowego dokumentu, w którym każda nowa litera będzie znajdowała się na nowej stronie, a tutaj ten plik można już zapisać.

Wniosek

I tak w tej lekcji nauczyłeś się używać narzędzia scalania do tworzenia dokumentów na podstawie szablonu. Zapiszmy pokrótce sekwencję działań:

  1. W procesorze arkuszy kalkulacyjnych konieczne jest utworzenie bazy danych, z której będą pobierane dane do wypełniania pól.
  2. Musisz stworzyć szablon listu.
  3. Wykonaj scalenie i zapisz wynik.

A, nazwiska w kolumnie B i zawody w kolumnie C.

2. Utwórz dokument Word (.doc lub .docx)


(A), (B) oraz (C).

(A), (B) oraz (C) (A)- Nazwa, (B)- nazwisko, (C)- zawód.

Ustawienia programy.

3. Wybierz ścieżki dla plików i folderów


Wybierz

4. Ustaw arkusze i wiersze żądanych danych


Arkusze danych pliku Excel

Wiersze danych pliku Excel Arkusze danych pliku Excel

1 .

Jeśli chcesz, aby wszystkie arkusze i/lub wiersze Twojego pliku Excela z danymi brały udział w tworzeniu dokumentu, kliknij odpowiedni przycisk po prawej stronie z podpisem liczby(jego napis zmieni się na Wszystko).

5. Ustaw szablon nazwy dla nowych plików tekstowych


Ustaw szablon nazw dla nowych plików tekstowych:

Nowy szablon nazw plików tekstowych jest szablonem nazw nowych dokumentów (plików tekstowych) generowanych przez program. Tutaj szablon nazwy zawiera nazwy kolumn pliku Excel, ujęte w nawiasy klamrowe: (A) oraz (B). Podczas generowania nowego dokumentu program zastąpi wszystkie (A) oraz (B) odpowiednie wartości komórek z pliku Excela - będzie to nazwa nowego dokumentu (pliku Word).

Możesz ustawić własne znaki graniczne na karcie Ustawienia programy.

6. Kliknij „Generuj”


Naciśnij przycisk Generować a postęp pojawi się na ekranie. Dokumenty (pliki tekstowe) zostaną utworzone dokładnie tyle, ile linii pliku Excel jest zaangażowanych w tworzenie.

7. Wszystko


Wszystkie dokumenty (pliki tekstowe) zostały utworzone i znajdują się w folderze określonym w Folder do zapisywania nowych plików tekstowych. Wszystko:)

Exwog- generator szablonów raportów od Excela do Worda

Darmowy generator plików Word według szablonu (plik Word) na podstawie danych z pliku Excel

Działa na Mac OS, Windows i Linux

Pozwala ustawić nazwy nowych wygenerowanych plików tekstowych

Pozwala ustawić arkusze i wiersze z wymaganymi danymi

Pozwala ustawić znaki obramowania dla nazw kolumn Excel

Łatwy w użyciu

Przechowuj swoje dane w formacie Excel (.xls i .xlsx) i generuj pliki Word (.doc i .docx) kilkoma kliknięciami :)


Jak to działa?

Spójrz na swój plik Excela


W tym przykładzie plik Excel zawiera informacje o klientach. Każda linia odpowiada konkretnemu klientowi. Nazwiska są w kolumnie A, nazwiska w kolumnie B i zawody w kolumnie C.

Kliknij, aby zobaczyć

Utwórz dokument Word (.doc lub .docx)


Kliknij, aby zobaczyć

Utwórz "szablon" (plik tekstowy) do generowania nowych dokumentów (plików tekstowych). Tutaj tekst „szablonu” zawiera nazwy kolumn pliku Excel, ujęte w nawiasy klamrowe: (A), (B) oraz (C).

Program wygeneruje nowe dokumenty według „szablonu” zastępując wszystkie (A), (B) oraz (C) odpowiednie wartości komórek z pliku Excel: (A)- Nazwa, (B)- nazwisko, (C)- zawód.

Możesz także ustawić własne znaki graniczne na karcie Ustawienia programy.

Wybierz ścieżki dla plików i folderów


Wybierz ścieżki dla plików i folderów (przyciski oznaczone Wybierz). W programie określasz następujące ścieżki:

Plik Excel z danymi (*.xls, *.xlsx)- jest to ścieżka do Twojego pliku Excela z danymi (informacjami o kliencie);

Plik szablonu programu Word (*.doc, *.docx) jest ścieżką do twojego "szablonu" (pliku słownego utworzonego w poprzednim kroku);

Folder do zapisywania nowych plików tekstowych- jest to ścieżka do folderu, w którym program będzie zapisywał nowo wygenerowane dokumenty.

Kliknij, aby zobaczyć

Ustaw arkusze i wiersze żądanych danych


Kliknij, aby zobaczyć

Ustaw numery arkuszy i wierszy swojego pliku Excel z danymi (informacjami o klientach), na których chcesz generować dokumenty:

Arkusze danych pliku Excel- liczba arkuszy pliku Excel, które będą zaangażowane w tworzenie nowych dokumentów;

Wiersze danych pliku Excel- numery wierszy arkuszy (arkusze określone w Arkusze danych pliku Excel) pliku Excela, które będą zaangażowane w tworzenie nowych dokumentów. Na podstawie danych z każdej określonej linii zostanie utworzony osobny dokument (plik tekstowy).

Numeracja arkuszy i wierszy w programie zaczyna się od 1 .