Home
» MS-KANTOOR
»
Hoe maak je een geautomatiseerde samenvoeging van e-mails met afbeeldingen in LibreOffice Writer?
Hoe maak je een geautomatiseerde samenvoeging van e-mails met afbeeldingen in LibreOffice Writer?
Je kunt in LibreOffice Writer een prima samenvoeging maken voor namen, adressen, datums en andere tekstvelden, maar zodra elke ontvanger een andere foto, handtekening, productafbeelding, QR-code of badge nodig heeft, blijkt de eenvoudige workflow ineens een stuk minder eenvoudig. De reden hiervoor is belangrijk: de gedocumenteerde samenvoegvelden van Writer zijn databasevelden die als tekstplaceholders worden gebruikt. LibreOffice ondersteunt ook ingesloten en gekoppelde afbeeldingen, maar de huidige helpfunctie beschrijft geen native 'afbeeldingsveld voor samenvoeging' dat automatisch een afbeelding uit een kolom met bestandspaden vervangt voor elk record.
Dat laat twee praktische opties over. Als elk samengevoegd document hetzelfde logo of dezelfde achtergrondafbeelding gebruikt, gebruik dan de normale samenvoegfunctie van Writer en laat die afbeelding vaststaan in de sjabloon. Als de afbeelding voor elke rij moet veranderen, is de meer beheersbare aanpak om de tekst- en afbeeldingsgegevens in Calc te bewaren, een benoemd grafisch object in de Writer-sjabloon te reserveren en het samenvoegen te automatiseren met een macro in LibreOffice Basic. Deze handleiding gebruikt die tweede aanpak.
De instructies zijn afgestemd op de LibreOffice 26.2-documentatie die beschikbaar is in 2026. Menu's kunnen enigszins afwijken in andere versies of op macOS. De huidige Writer-handleiding van LibreOffice vermeldt dat afbeeldingen kunnen worden ingesloten of gekoppeld, terwijl de UNO API grafische objecten van Writer beschikbaar maakt XTextGraphicObjectsSupplieren automatisering het mogelijk maakt om een afbeelding in te stellen vanaf een externe URL. Deze functies maken een workflow voor afbeeldingen per record mogelijk, ook al biedt de standaard wizard voor samenvoegen van e-mails deze functie niet aan als een apart afbeeldingsveld.
Kies de juiste workflow voordat je begint.
Vereiste
Beste aanpak
Belangrijkste afweging
Hetzelfde logo of dezelfde foto op elke letter.
Standaard Writer-mail samenvoegen
Eenvoudig, maar het beeld verandert nooit door de opname.
Meer instelwerk, maar voorspelbare controle over het beeld.
De database slaat de afbeelding zelf op, niet een pad.
Database-/formulierworkflow of aangepaste UNO-code
Beter geschikt voor beheerde databases, maar zwaarder dan een samenvoeging op basis van spreadsheets.
Honderden of duizenden documenten in onbeheerde batches.
Macro of extern UNO-script
Vereist testen, loggen en discipline in bestandspaden.
Als het alleen om een vast bedrijfslogo gaat, stop dan hier en gebruik de normale LibreOffice-workflow voor standaardbrieven . De rest van dit artikel gaat over variabele afbeeldingen.
Stap 1: Bereid een schone Calc-gegevensbron voor.
Maak een Calc-blad met één kopregel en één record per regel. Plaats afbeeldingsverwijzingen in een aparte kolom. Een praktische indeling is CustomerID, FirstName, LastName, Email, ImagePath, en OutputName.
Gebruik één afbeeldingspad en één uitvoerbestandsnaam per rij, zodat de automatisering elk record kan verwerken zonder te hoeven gissen.
Gebruik absolute paden tijdens het bouwen en testen van de samenvoeging. Deze zijn minder draagbaar, maar ze voorkomen ambiguïteit. C:\MailMerge\Imageslice.jpgOp Windows of /home/user/mailmerge/images/alice.jpgLinux is het bijvoorbeeld gemakkelijker om problemen te diagnosticeren dan bij een relatief pad, waarvan de basisdirectory verandert afhankelijk van hoe het document is geopend.
Gebruik geen gemengde padindelingen van Windows en Linux in hetzelfde productiebestand. De gemengde voorbeelden in de illustratie tonen alleen het type waarde dat de kolom kan bevatten. Uw daadwerkelijke gegevensbron moet paden gebruiken die geldig zijn op de machine waarop de samenvoeging wordt uitgevoerd.
Een goede OutputNamekolom voorkomt ook conflicten met bestandsnamen. Geef de voorkeur aan een stabiele ID of een gezuiverde naam boven een e-mailadres of willekeurige vrije tekst. Als dezelfde waarde twee keer voorkomt, bepaal dan van tevoren of de macro de bestaande waarde moet overschrijven, een achtervoegsel moet toevoegen of moet mislukken.
Stap 2: Controleer of Writer de bestanden kan lezen.
De standaard samenvoegfunctie van Writer maakt gebruik van een geregistreerde gegevensbron. U kunt de wizard voor samenvoegen, een adresgegevensbron of de gegevensbronbrowser gebruiken. De huidige helpdocumentatie van LibreOffice beschrijft Extra > Wizard voor samenvoegen en biedt ook de mogelijkheid om databasevelden in te voegen via Invoegen > Veld > Meer velden > Database . Zie de officiële referentie voor databasevelden .
Gebruik de gegevensbronweergave van Writer om te controleren of de verwachte kolommen en records zichtbaar zijn voordat u beeldautomatisering toevoegt.
Deze controle is nuttig, zelfs als de uiteindelijke macro de spreadsheet direct leest. Het spoort veelvoorkomende problemen vroegtijdig op: het verkeerde werkblad, onverwachte kopnamen, lege records of een spreadsheet die na registratie is verplaatst.
Voor een gewone tekstsamenvoeging kunt u een kolomkop naar het document slepen of een samenvoegveld invoegen via het tabblad Database. De officiële help van Writer bevestigt dat deze velden worden vervangen door database-inhoud wanneer de samenvoeging wordt uitgevoerd. Voor de variabele afbeelding moet u er echter niet van uitgaan dat het slepen ImagePathnaar de pagina het pad in een afbeelding verandert. Het blijft data, tenzij code het interpreteert en een grafisch object bijwerkt.
Stap 3: Maak de Writer-sjabloon aan en geef de afbeeldingsplaceholder een naam.
Maak de lay-out voor de brief, het certificaat, de badge of het rapport in Writer. Gebruik voor de tekstwaarden normale samenvoegvelden of ondubbelzinnige tekens zoals {FirstName}, {LastName}, en {CustomerID}als uw macro deze zelf vervangt.
Voeg vervolgens een voorbeeldafbeelding in op de plek waar de variabele afbeelding moet verschijnen. Stel de gewenste grootte, tekstterugloop en verankering in voordat u het proces automatiseert. LibreOffice beschrijft het formaat, de positionering, de verankering, de tekstterugloop en het gedrag van gekoppelde afbeeldingen in het huidige hoofdstuk 'Afbeeldingen en grafieken' van Writer 26.2 .
Reserveer de uiteindelijke afbeeldingspositie in de sjabloon en geef het grafische object een stabiele naam, bijvoorbeeld MergeImage.
Geef het grafische object een stabiele naam, bijvoorbeeld MergeImage. Het exacte eigenschappendialoogvenster kan per versie verschillen. Als u niet zeker weet welk object Writer beschikbaar stelt, kunt u daarom Extra > Ontwikkeltools gebruiken . De Ontwikkeltools van LibreOffice kunnen grafische objecten, eigenschappen, methoden en interfaces in het huidige document inspecteren. Dit maakt het een veiliger diagnostisch hulpmiddel dan het raden van een interne objectnaam.
Voor een voorspelbare lay-out kunt u dezelfde beeldverhouding gebruiken voor alle bronafbeeldingen of bepalen hoe u ze wilt bijsnijden. Writer kan een afbeelding aanpassen aan de afmetingen van de placeholder, maar een portretfoto die in een breed, bannerachtig kader wordt geplaatst, ziet er nog steeds verkeerd uit, tenzij u de bestanden eerst normaliseert.
Stap 4: Automatiseer de export van variabele afbeeldingen en documenten
De belangrijkste automatiseringsbewerking is eenvoudig: open de sjabloon, vervang de tekstplaceholders, zoek het benoemde grafische object, laad het afbeeldingsbestand van de rij in dat object en exporteer vervolgens het resultaat. De UNO API-documentatie van LibreOffice getGraphicObjects()beschrijft de toegang tot ingesloten en gekoppelde afbeeldingen en de TextGraphicObjectservice voor grafische eigenschappen. De GraphicURLeigenschap is verouderd voor algemene objectopslag ten gunste van Graphic, maar de huidige API vermeldt expliciet dat het instellen van een externe URL die afbeelding in het grafische object laadt. Dat maakt het handig voor een eenvoudige Basic-macro die lokale bestandspaden gebruikt.
De automatiseringslaag zet een ImagePath-waarde om in de daadwerkelijke afbeelding die in elk gegenereerd document wordt weergegeven.
Het volgende voorbeeld is opzettelijk klein. Wijzig de drie paden, de bladnaam, de kolomindexen en de plaatsaanduidingen zodat ze overeenkomen met uw eigen bestanden. Test het eerst met twee records voordat u een grote batch uitvoert.
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
Deze macro is een voorbeeld, geen universeel in te vullen programma. LibreOffice-installaties kunnen verschillende macrobeveiligingsbeleidsregels, padregels van het besturingssysteem en sjabloonindelingen hebben. De belangrijkste geverifieerde API-concepten zijn dat Writer zijn verzameling grafische objecten beschikbaar stelt en dat LibreOffice een afbeelding kan instellen vanaf een externe URL. Voor grotere implementaties is het raadzaam de afbeelding te laden via de moderne GraphicAPI in plaats van te vertrouwen op het compatibiliteitsgedrag van de standaardmethode GraphicURL. De officiële referenties zijn XTextGraphicObjectsSupplier en TextGraphicObject .
Stap 5: Voer een kleine batch uit en controleer het resultaat.
Voordat u de volledige gegevensbron verwerkt, voert u twee of drie rijen met een afwijkende beeldverhouding in: één JPG, één PNG en idealiter één afbeelding met een andere beeldverhouding. Controleer alle onderstaande punten voordat u de afbeelding opschaalt:
De naam van de ontvanger in het document komt overeen met de afbeelding in dezelfde rij van het spreadsheet.
In het uiteindelijke document wordt geen enkel afbeeldingspad als letterlijke tekst weergegeven.
De naam van het uitvoerbestand komt overeen met het beoogde record en overschrijft geen andere ontvanger.
De afbeelding past binnen het gereserveerde gebied zonder tekst naar een nieuwe pagina te verplaatsen of een ander object te bedekken.
Het gegenereerde PDF- of ODT-bestand wordt zelfstandig geopend nadat LibreOffice en Calc zijn gesloten.
Die laatste controle is belangrijk omdat gekoppelde afbeeldingen en ingesloten afbeeldingen zich anders gedragen. De huidige Writer-handleiding legt uit dat een gekoppelde afbeelding een aparte bestandsverwijzing blijft, terwijl een ingesloten afbeelding onderdeel wordt van het document. Als u ODT-bestanden naar een andere computer verzendt, controleer dan of het resultaat niet afhankelijk is van een lokaal pad dat alleen bestaat op de computer die de samenvoeging heeft uitgevoerd.
Veelvoorkomende problemen en de snelste oplossing
De uitvoer toont het bestandspad in plaats van de afbeelding.
Je hebt het ingevoegd ImagePathals een normaal samenvoegveld. Dat zou tekst moeten opleveren. Houd het pad in de gegevensbron, maar laat de macro het in het benoemde grafische object laden.
Elke plaat krijgt dezelfde afbeelding.
De sjabloonafbeelding is tussen de records niet gewijzigd, of uw lus leest een vaste cel. Registreer het rijnummer ImagePathtijdens een test met twee records. Als het pad verandert maar de afbeelding niet, controleer dan de naam van het grafische object met de ontwikkelaarstools.
De macro geeft aan dat MergeImage niet bestaat.
De afbeelding is hernoemd, vervangen of wordt niet weergegeven onder de naam die u verwacht. Selecteer de afbeelding en inspecteer deze met Extra > Ontwikkeltools . De UNO API geeft grafische objecten weer op naam, dus de macro en de sjabloon moeten exact overeenkomen.
De afbeeldingen verdwijnen op een andere computer.
U hebt waarschijnlijk een document opgeslagen dat nog steeds verwijzingen naar externe bestanden bevat. Als draagbaarheid belangrijk voor u is, zorg er dan voor dat het gegenereerde document de afbeelding insluit of exporteer naar PDF nadat de afbeelding is geladen. De handleiding voor afbeeldingen in LibreOffice legt het verschil uit tussen gekoppelde en ingesloten afbeeldingen en hoe koppelingen kunnen worden verbroken om bestanden in te sluiten.
HTML-mailmerge verliest afbeeldingen
Dit is een gedocumenteerde beperking die het overwegen waard is voordat u de e-mailuitvoer kiest. De LibreOffice-help vermeldt dat ingesloten of gekoppelde afbeeldingen niet met de e-mail worden meegestuurd wanneer een standaardbrief in HTML-formaat is. Als de afbeelding essentieel is, gebruik dan een PDF-bijlage of test een andere verzendworkflow in plaats van ervan uit te gaan dat HTML-mailmerge de afbeelding behoudt. Zie Een standaardbrief maken .
Wanneer moet je in plaats daarvan de MailMerge UNO-service van LibreOffice gebruiken?
Als uw tekstvelden al gebruikmaken van de ingebouwde database-samenvoegfunctie van Writer en u programmatische controle over de uitvoer nodig hebt, biedt LibreOffice ook een MailMergeservice aan. De gedocumenteerde eigenschappen hiervan zijn onder andere DataSourceName, Command, DocumentURL, OutputURL, FileNameFromColumn, en SaveAsSingleFile. Deze API is handig wanneer u standaard samenvoegbewerkingen vanuit code wilt automatiseren. De API zelf documenteert echter nog geen veld voor het pad naar een afbeeldingsbestand per record, dus mogelijk moet u de uitvoering van de samenvoegbewerking combineren met de verwerking van grafische objecten. Zie de officiële referentie voor de MailMerge-service .
Definitieve checklist
Gebruik de normale Writer-samenvoegfunctie wanneer de afbeelding voor elke ontvanger vaststaat.
Gebruik één overzichtelijke ImagePathkolom als de afbeelding per record verschilt.
Geef de plaatsaanduiding voor de afbeelding van de schrijver een naam en zorg ervoor dat de afmetingen constant blijven.
Los het afbeeldingspad op in de automatisering; ga er niet vanuit dat een samenvoegveld voor tekst automatisch een afbeelding wordt.
Test twee of drie records voordat u een volledige batch verwerkt.
Open de geëxporteerde bestanden nadat u de brondocumenten hebt gesloten om te controleren of de uitvoer op zichzelf staat.
Voor de meeste kleine en middelgrote opdrachten biedt een Calc-spreadsheet in combinatie met een Writer-sjabloon en een korte Basic-macro de beste balans tussen transparantie en controle. Het vereist meer voorbereiding dan een gewone tekstsamenvoeging, maar u kunt precies zien welke rij welke afbeelding levert, de uitvoerbestandsnaam kiezen en het resultaat controleren voordat u honderden gepersonaliseerde bestanden verzendt.