Jak utworzyć automatyczną korespondencję seryjną z obrazami w programie LibreOffice Writer

Możesz stworzyć idealnie działającą korespondencję seryjną w LibreOffice Writer dla nazw, adresów, dat i innych pól tekstowych, a potem odkryć, że gdy każdy odbiorca potrzebuje innego zdjęcia, podpisu, obrazu produktu, kodu QR lub identyfikatora, prosty obieg pracy przestaje być prosty. Powód jest istotny: udokumentowane pola korespondencji seryjnej w Writerze to pola bazy danych używane jako symbole zastępcze tekstu. LibreOffice obsługuje również osadzone i powiązane grafiki, ale jego aktualna pomoc nie zawiera dokumentacji natywnego „pola obrazu korespondencji seryjnej”, które automatycznie zastępuje obraz z kolumny ścieżki pliku dla każdego rekordu.

Pozostają dwie praktyczne opcje. Jeśli każdy scalany dokument używa tego samego logo lub obrazu tła, należy użyć standardowej funkcji korespondencji seryjnej w Writerze i zachować ten obraz w szablonie. Jeśli obraz musi się zmieniać w każdym wierszu, bardziej kontrolowanym rozwiązaniem jest zachowanie danych tekstowych i graficznych w Calcu, zarezerwowanie nazwanego obiektu graficznego w szablonie Writera i zautomatyzowanie scalania za pomocą makra LibreOffice Basic. W tym przewodniku wykorzystano to drugie podejście.

Instrukcje są zgodne z dokumentacją LibreOffice 26.2, dostępną w 2026 roku. Menu mogą się nieznacznie różnić w innych wersjach lub na macOS. Aktualny podręcznik LibreOffice dla Writera stwierdza, że ​​obrazy można osadzać lub linkować, natomiast interfejs API UNO udostępnia obiekty graficzne Writera XTextGraphicObjectsSupplieri umożliwia automatyzacji ustawianie grafiki z zewnętrznego adresu URL. Te elementy umożliwiają przepływ pracy dla obrazów dla każdego rekordu, mimo że standardowy Kreator korespondencji seryjnej nie udostępnia go jako dedykowanego pola obrazu.

Wybierz odpowiedni przepływ pracy przed rozpoczęciem

WymógNajlepsze podejścieGłówny kompromis
To samo logo lub zdjęcie na każdej literzeKorespondencja seryjna Standard WriterProste, ale obraz nigdy się nie zmienia w zależności od nagrania
Inny obraz dla każdego odbiorcySzablon Writer + Calc + automatyzacja Basic/UNOWięcej ustawień, ale przewidywalna kontrola nad obrazem
Baza danych przechowuje sam obraz, a nie ścieżkęPrzepływ pracy bazy danych/formularza lub niestandardowy kod UNOLepsze dla zarządzanych baz danych, ale bardziej obciążające niż scalanie oparte na arkuszach kalkulacyjnych
Setki lub tysiące dokumentów w nienadzorowanych partiachMakro lub zewnętrzny skrypt UNOWymaga testowania, rejestrowania i dyscypliny ścieżek plików

Jeśli Twoim przypadkiem użycia jest tylko stałe logo firmy, zatrzymaj się tutaj i skorzystaj ze standardowego procesu tworzenia listów w LibreOffice . Reszta artykułu dotyczy zmiennych obrazów.

Krok 1: Przygotuj czyste źródło danych Calc

Utwórz arkusz Calc z jednym wierszem nagłówka i jednym rekordem na wiersz. Odniesienia do obrazów przechowuj w osobnych kolumnach. Praktyczny układ to CustomerID, FirstName, LastName, Email, ImagePathi OutputName.

Arkusz LibreOffice Calc zawierający pola klienta, ścieżki obrazów i nazwy wyjściowe do automatycznego scalania w programie Writer.
Zachowaj jedną ścieżkę dostępu do obrazu i jedną nazwę pliku wyjściowego na wiersz, aby automatyzacja mogła rozpoznać każdy rekord bez zgadywania.

Używaj ścieżek bezwzględnych podczas budowania i testowania scalania. Są one mniej przenośne, ale eliminują niejednoznaczności. Na przykład C:\MailMerge\Imageslice.jpgw systemie Windows lub /home/user/mailmerge/images/alice.jpgLinux łatwiej jest je zdiagnozować niż ścieżkę względną, której katalog bazowy zmienia się w zależności od sposobu otwarcia dokumentu.

Nie należy mieszać formatów ścieżek dla systemów Windows i Linux w tym samym pliku produkcyjnym. Połączone przykłady na ilustracji pokazują jedynie typ wartości przechowywanej w kolumnie. Rzeczywiste źródło danych powinno używać ścieżek prawidłowych na komputerze, na którym przeprowadzane jest scalanie.

Dobra OutputNamekolumna zapobiega również kolizjom nazw plików. Preferuj stabilny identyfikator lub znormalizowaną nazwę zamiast adresu e-mail lub dowolnego tekstu. Jeśli ta sama wartość pojawi się dwukrotnie, zdecyduj z góry, czy makro ma nadpisać, dodać sufiks, czy zakończyć działanie niepowodzeniem.

Krok 2: Sprawdź, czy Writer może odczytać rekordy

Standardowa korespondencja seryjna programu Writer korzysta z zarejestrowanego źródła danych. Można użyć Kreatora korespondencji seryjnej, źródła danych adresowych lub przeglądarki źródeł danych. Aktualna pomoc LibreOffice znajduje się w sekcji Narzędzia > Kreator korespondencji seryjnej , a także umożliwia wstawianie pól bazy danych poprzez Wstawianie > Pole > Więcej pól > Baza danych . Zobacz oficjalne informacje na temat pól bazy danych .

LibreOffice Writer pokazujący źródło danych z wierszami klientów i standardowymi polami korespondencji seryjnej w liście.
Przed dodaniem automatyzacji obrazów sprawdź, czy oczekiwane kolumny i rekordy są widoczne, korzystając z widoku źródła danych programu Writer.

To sprawdzenie jest przydatne nawet wtedy, gdy makro końcowe odczytuje arkusz kalkulacyjny bezpośrednio. Wykrywa ono na wczesnym etapie typowe problemy: niewłaściwy arkusz, nieoczekiwane nazwy nagłówków, puste rekordy lub arkusz kalkulacyjny, który został przeniesiony po rejestracji.

W przypadku standardowej korespondencji seryjnej zawierającej wyłącznie tekst, można przeciągnąć nagłówek kolumny do dokumentu lub wstawić pole korespondencji seryjnej z karty Baza danych. Oficjalna pomoc programu Writer potwierdza, że ​​pola te są zastępowane zawartością bazy danych podczas scalania. W przypadku zmiennej „obraz” nie należy jednak zakładać, że przeciągnięcie ImagePathna stronę spowoduje przekształcenie ścieżki w obraz. Pozostanie ona danymi, chyba że kod zinterpretuje ją i zaktualizuje obiekt graficzny.

Krok 3: Utwórz szablon programu Writer i nadaj nazwę symbolowi zastępczemu obrazu

Utwórz układ listu, certyfikatu, odznaki lub raportu w programie Writer. W przypadku wartości tekstowych użyj standardowych pól korespondencji seryjnej lub jednoznacznych tokenów, takich jak {FirstName}, {LastName}, i , {CustomerID}jeśli makro ma je zastąpić.

Następnie wstaw przykładowy obraz w miejscu, w którym powinien pojawić się obraz o zmiennej rozdzielczości. Ustaw żądany rozmiar, zawijanie i zakotwiczenie przed zautomatyzowaniem. LibreOffice dokumentuje rozmiar, pozycjonowanie, zawijanie, zawijanie i zachowanie powiązanego obrazu w bieżącym rozdziale „Obrazy i grafika” w programie Writer 26.2 .

Szablon programu LibreOffice Writer z polami tekstowymi do scalania i wybranym symbolem zastępczym grafiki o nazwie MergeImage.
Zarezerwuj ostateczną pozycję obrazu w szablonie i nadaj obiektowi graficznemu stabilną nazwę, np. MergeImage.

Nadaj obiektowi graficznemu stabilną nazwę, taką jak MergeImage. Dokładny opis właściwości może się różnić w zależności od wersji, więc jeśli nie masz pewności, jaki obiekt udostępnia Writer, użyj opcji Narzędzia > Narzędzia programistyczne . Narzędzia programistyczne pakietu LibreOffice umożliwiają inspekcję obiektów graficznych, właściwości, metod i interfejsów w bieżącym dokumencie. Dzięki temu jest to bezpieczniejsze narzędzie diagnostyczne niż zgadywanie wewnętrznej nazwy obiektu.

Aby uzyskać przewidywalny układ, użyj tego samego współczynnika proporcji dla wszystkich obrazów źródłowych lub zdecyduj, jak chcesz je przyciąć. Program Writer może dostosować rozmiar grafiki do wymiarów obiektu zastępczego, ale zdjęcie portretowe wstawione w szeroką ramkę w kształcie baneru nadal będzie wyglądać nieprawidłowo, jeśli pliki nie zostaną najpierw znormalizowane.

Krok 4: Zautomatyzuj eksport zmiennych obrazów i dokumentów

Kluczowa operacja automatyzacji jest prosta: otwórz szablon, zastąp symbole zastępcze tekstu, znajdź nazwany obiekt graficzny, wczytaj plik obrazu wiersza do tego obiektu, a następnie wyeksportuj wynik. Dokumenty API UNO pakietu LibreOffice getGraphicObjects()umożliwiają dostęp do osadzonych i powiązanych grafik oraz TextGraphicObjectusługę właściwości graficznych. GraphicURLWłaściwość ta jest przestarzała w ogólnym przechowywaniu obiektów na rzecz [brakuje Graphickontekstu - brakuje ...

LibreOffice Basic IDE wyświetla makro korespondencji seryjnej, które odczytuje ścieżkę obrazu i aktualizuje obiekt graficzny Writer.
Warstwa automatyzacji odpowiada za konwersję wartości ImagePath na rzeczywistą grafikę wyświetlaną w każdym generowanym dokumencie.

Poniższy przykład jest celowo mały. Zmień trzy ścieżki, nazwę arkusza, indeksy kolumn i nazwy symboli zastępczych, aby pasowały do ​​Twoich plików. Przetestuj to na dwóch rekordach przed uruchomieniem dużej partii.

Sub MailMergeWithImages()
    Dim calcDoc As Object, sheet As Object, doc As Object
    Dim graphics As Object, imageObj As Object
    Dim row As Long
    Dim firstName As String, lastName As String
    Dim imagePath As String, outputName As String
    Dim sourceURL As String, templateURL As String, outputDir As String

    sourceURL = ConvertToURL("C:\MailMerge\customers.ods")
    templateURL = ConvertToURL("C:\MailMerge\LetterTemplate.odt")
    outputDir = ConvertToURL("C:\MailMerge\Output")

    calcDoc = StarDesktop.loadComponentFromURL(sourceURL, "_blank", 0, Array())
    sheet = calcDoc.Sheets.getByName("Sheet1")

    row = 1  ' row 0 contains headers
    Do While sheet.getCellByPosition(0, row).String <> ""
        firstName = sheet.getCellByPosition(1, row).String
        lastName = sheet.getCellByPosition(2, row).String
        imagePath = sheet.getCellByPosition(4, row).String
        outputName = sheet.getCellByPosition(5, row).String

        doc = StarDesktop.loadComponentFromURL(templateURL, "_blank", 0, Array())

        ReplaceAll doc, "{FirstName}", firstName
        ReplaceAll doc, "{LastName}", lastName

        graphics = doc.getGraphicObjects()
        If graphics.hasByName("MergeImage") Then
            imageObj = graphics.getByName("MergeImage")
            imageObj.GraphicURL = ConvertToURL(imagePath)
        Else
            MsgBox "Graphic object MergeImage was not found."
            doc.close(True)
            Exit Sub
        End If

        Dim args(1) As New com.sun.star.beans.PropertyValue
        args(0).Name = "FilterName"
        args(0).Value = "writer_pdf_Export"
        args(1).Name = "Overwrite"
        args(1).Value = True

        doc.storeToURL(outputDir & outputName & ".pdf", args())
        doc.close(True)
        row = row + 1
    Loop

    calcDoc.close(True)
End Sub

Sub ReplaceAll(doc As Object, findText As String, replacement As String)
    Dim d As Object
    d = doc.createReplaceDescriptor()
    d.SearchString = findText
    d.ReplaceString = replacement
    doc.replaceAll(d)
End Sub

To makro jest wzorcem, a nie uniwersalnym programem. Instalacje LibreOffice mogą mieć różne zasady bezpieczeństwa makr, reguły ścieżki systemu operacyjnego i układy szablonów. Ważne, zweryfikowane koncepcje API polegają na tym, że Writer udostępnia swoją kolekcję obiektów graficznych, a LibreOffice może ustawić grafikę z zewnętrznego adresu URL. W przypadku większych wdrożeń, rozważ załadowanie grafiki za pośrednictwem nowoczesnego GraphicAPI, zamiast polegać na zachowaniu zgodności z GraphicURL. Oficjalne referencje to XTextGraphicObjectsSupplier i TextGraphicObject .

Krok 5: Uruchom małą partię i sprawdź wynik

Przed przetworzeniem całego źródła danych, uruchom dwa lub trzy celowo różne wiersze: jeden JPG, jeden PNG i najlepiej jeden obraz o innym współczynniku proporcji. Przed skalowaniem sprawdź wszystkie poniższe elementy:

  • Nazwa odbiorcy w dokumencie odpowiada obrazowi z tego samego wiersza arkusza kalkulacyjnego.
  • W ostatecznym dokumencie żadna ścieżka do obrazu nie jest wyświetlana jako tekst dosłowny.
  • Nazwa pliku wyjściowego odpowiada docelowemu rekordowi i nie nadpisuje innego odbiorcy.
  • Obraz dopasowuje się do zarezerwowanego obszaru, nie przenosząc tekstu na nową stronę ani nie zakrywając innego obiektu.
  • Wygenerowany plik PDF lub ODT otwiera się niezależnie po zamknięciu programów LibreOffice i Calc.

To ostatnie sprawdzenie ma znaczenie, ponieważ grafika powiązana i grafika osadzona zachowują się inaczej. Aktualny podręcznik programu Writer wyjaśnia, że ​​powiązany obraz pozostaje oddzielnym odniesieniem do pliku, podczas gdy obraz osadzony staje się częścią dokumentu. Jeśli przesyłasz pliki ODT na inny komputer, sprawdź, czy wynik nie zależy od ścieżki lokalnej, która istnieje tylko na komputerze, na którym wykonano scalenie.

Typowe awarie i najszybsze sposoby ich rozwiązania

Na wyjściu wyświetlana jest ścieżka do pliku zamiast obrazu

Wstawiłeś pole ImagePathjako zwykłą korespondencję seryjną. Powinno ono wygenerować tekst. Zachowaj ścieżkę w źródle danych, ale pozwól makrze załadować ją do nazwanego obiektu graficznego.

Każdy rekord otrzymuje ten sam obraz

Obraz szablonu nigdy nie został zmieniony między rekordami lub pętla odczytuje stałą komórkę. Zaloguj numer wiersza i ImagePathpodczas testu dwóch rekordów. Jeśli ścieżka się zmieni, ale obraz nie, sprawdź nazwę obiektu graficznego za pomocą Narzędzi programistycznych.

Makro mówi, że MergeImage nie istnieje

Grafika została zmieniona, zastąpiona lub nie jest wyświetlana pod oczekiwaną nazwą. Wybierz obraz i sprawdź go w menu Narzędzia > Narzędzia programistyczne . Interfejs API UNO wyświetla obiekty graficzne według nazwy, więc makro i szablon muszą się dokładnie zgadzać.

Obrazy znikają na innym komputerze

Prawdopodobnie zapisałeś dokument, który nadal odwołuje się do plików zewnętrznych. Jeśli przenośność ma znaczenie, upewnij się, że wygenerowany plik zawiera osadzony obraz lub wyeksportuj go do pliku PDF po załadowaniu obrazu. Przewodnik po obrazach w LibreOffice wyjaśnia różnicę między grafiką powiązaną a osadzoną oraz jak można przerwać linki, aby osadzić pliki.

Korespondencja seryjna HTML traci obrazy

To udokumentowane ograniczenie, które warto sprawdzić przed wyborem formatu wiadomości e-mail. Pomoc LibreOffice informuje, że w przypadku listu seryjnego w formacie HTML osadzone lub powiązane obrazy nie są wysyłane wraz z wiadomością e-mail. Jeśli obraz jest niezbędny, użyj załącznika PDF lub przetestuj inny obieg dostarczania, zamiast zakładać, że korespondencja seryjna HTML go zachowa. Zobacz Tworzenie listu seryjnego .

Kiedy zamiast tego należy używać usługi MailMerge UNO pakietu LibreOffice

Jeśli Twoje pola tekstowe korzystają już z natywnej funkcji korespondencji seryjnej bazy danych Writera i potrzebujesz programowej kontroli nad wynikami, LibreOffice udostępnia również MailMergeusługę. Jej udokumentowane właściwości obejmują DataSourceName, Command, DocumentURL, OutputURL, FileNameFromColumni SaveAsSingleFile. To API jest przydatne, gdy chcesz zautomatyzować standardową korespondencję seryjną z poziomu kodu. Samo w sobie nie dokumentuje ono pola ścieżki pliku obrazu dla każdego rekordu, więc może być konieczne połączenie wykonywania korespondencji seryjnej z obsługą obiektów graficznych. Zobacz oficjalną dokumentację usługi MailMerge .

Ostateczna lista kontrolna

  • Użyj standardowej funkcji korespondencji seryjnej w programie Writer, w której obraz jest stały dla każdego adresata.
  • ImagePathJeśli obraz różni się w zależności od rekordu, należy użyć jednej czystej kolumny.
  • Nadaj nazwę symbolowi zastępczemu graficznemu Writer i zachowaj stałe wymiary.
  • Rozwiąż ścieżkę obrazu w sposób zautomatyzowany; nie oczekuj, że pole scalonego tekstu automatycznie stanie się obrazem.
  • Przed uruchomieniem pełnej partii przetestuj dwa lub trzy rekordy.
  • Otwórz wyeksportowane pliki po zamknięciu dokumentów źródłowych, aby udowodnić, że dane wyjściowe są samodzielne.

W przypadku większości małych i średnich zadań arkusz Calc, szablon Writera i krótkie makro Basic zapewniają najlepszą równowagę między przejrzystością a kontrolą. Wymaga to więcej konfiguracji niż zwykła korespondencja seryjna, ale można dokładnie sprawdzić, który wiersz generuje dany obraz, wybrać nazwę pliku wyjściowego i zweryfikować wynik przed wysłaniem setek spersonalizowanych plików.

Zostaw komentarz

Jak przenieść obraz w programie Microsoft Word

Jak przenieść obraz w programie Microsoft Word

Dowiedz się, jak przeciągać obraz w programie Word, wybierać opcje zawijania tekstu, zachowywać go w akapicie lub mocować na stronie oraz rozwiązywać problemy z obrazami, których nie można przenieść.

Jak wstawić pole wyboru w programie Excel: dwie proste metody

Jak wstawić pole wyboru w programie Excel: dwie proste metody

Dowiedz się, jak wstawić pole wyboru w programie Excel za pomocą narzędzia w komórce, zliczyć zaznaczone elementy za pomocą formuł lub dodać powiązany formant formularza w starszych wersjach programu na komputery stacjonarne.

Jak automatycznie wypełniać litery w programie Excel: od A do Z i dalej

Jak automatycznie wypełniać litery w programie Excel: od A do Z i dalej

Generuj litery od A do Z, małe litery lub etykiety powyżej Z w programie Excel za pomocą formuły z uchwytem wypełniania, SEKWENCJI lub wielokrotnego użytku listy niestandardowej.

Jak przekreślić tekst w programie Excel: skróty i metody krok po kroku

Jak przekreślić tekst w programie Excel: skróty i metody krok po kroku

Dowiedz się, jak przekreślać wiersze w programie Excel w systemie Windows, na komputerze Mac i w przeglądarce, formatować część komórki i usuwać wiersze bez usuwania ich wartości.

Czym jest Microsoft Access? Jak działają jego narzędzia bazodanowe

Czym jest Microsoft Access? Jak działają jego narzędzia bazodanowe

Microsoft Access to aplikacja bazy danych systemu Windows do przechowywania powiązanych rekordów, tworzenia zapytań, tworzenia formularzy wprowadzania danych i generowania raportów. Dowiedz się, jak działa i kiedy się sprawdza.

Importowanie i eksportowanie danych z programu Office Outlook 2010: przenoszenie danych za pomocą pliku PST

Importowanie i eksportowanie danych z programu Office Outlook 2010: przenoszenie danych za pomocą pliku PST

Dowiedz się, jak zaimportować plik PST do programu Outlook 2010 lub wyeksportować pocztę, kontakty, kalendarz i zadania. Postępuj zgodnie z odpowiednimi menu i unikaj pominiętych folderów lub duplikatów.

Zmiana wysokości i szerokości linii siatki w programie Word 2010

Zmiana wysokości i szerokości linii siatki w programie Word 2010

Dowiedz się, jak dostosować wysokość i szerokość linii siatki w programie Word 2010, zmienić widoczną częstotliwość linii oraz ustawić odstępy między liniami siatki w pionie i w poziomie.

Jak wstawić aktywną stronę internetową do slajdu programu PowerPoint

Jak wstawić aktywną stronę internetową do slajdu programu PowerPoint

Za pomocą dodatku LiveWeb możesz umieścić witrynę internetową na slajdzie programu PowerPoint, ustawić jej rozmiar i sposób odświeżania oraz sprawdzić zgodność przed prezentacją.

Odzyskiwanie hasła PST programu Outlook za pomocą jądra Nucleus

Odzyskiwanie hasła PST programu Outlook za pomocą jądra Nucleus

Odzyskaj zapomniane hasło PST programu Outlook, korzystając z bieżących instrukcji Kernela, obejmujących m.in. identyfikację właściwego pliku, wykonanie kopii zapasowej i sprawdzenie ograniczeń narzędzia.

Dodaj święta narodowe do kalendarza Outlook

Dodaj święta narodowe do kalendarza Outlook

Dodaj święta krajowe w nowym Outlooku, Outlooku w przeglądarce lub klasycznej wersji Outlooka. Dowiedz się, jak unikać duplikatów wydarzeń i sprawdzać, czy nie brakuje dat z lat 2026–2027.