MailMerge 2.5.1
dotnet add package MailMerge --version 2.5.1
NuGet\Install-Package MailMerge -Version 2.5.1
<PackageReference Include="MailMerge" Version="2.5.1" />
paket add MailMerge --version 2.5.1
#r "nuget: MailMerge, 2.5.1"
// Install MailMerge as a Cake Addin #addin nuget:?package=MailMerge&version=2.5.1 // Install MailMerge as a Cake Tool #tool nuget:?package=MailMerge&version=2.5.1
MailMerge for docx Documents
MailMerge replaces simple and complex merge fields in WordProcessingML .docx files and helps you apply .Net's Xml & XPath tooling to Word documents.
Component Usage
For Streams:
var (outputStream, errors) = new MailMerger().Merge(inputStream, Dictionary);
For Files:
var (ok,errors) = new MailMerger().Merge(inputFileName, Dictionary, outputFileName);
Set the current DateTime for date merge fields on MailMerger.DateTime
, e.g. new MailMerger{DateTime=...}
CommandLine Usage
Merge a docx file:
dotnet MailMerge.dll inputFile1 outputFile1 [inputFileN [...outputFileN]] [ key=value [...] ]
- example:
dotnet MailMerge.dll MyTemplate.docx MyLetterToBill.docx FirstName=Bill "LastName=O Reilly"
Show a document's Xml:
dotnet MailMerge.dll --showxml file [fileN ...]
Component Extension Methods & Helpers
stream.AsWordprocessingDocument(isEditable)
stream.AsXPathDocOfWordprocessingMainDocument(isEditable)
stream.AsXElementOfWordprocessingMainDocument(isEditable)
stream.GetXmlDocumentOfWordprocessingMainDocument()
fileInfo.GetXElementOfWordprocessingMainDocument()
fileInfo.GetXmlDocumentOfWordprocessingMainDocument()
A NamespaceManager, NameTable & Uri which you need when creating an XmlDocument and/or XElements:
var xdoc = new XmlDocument(OoXmlNamespace.Manager.NameTable)
var xelement= mainDocumentPart.CreateElement("w", "t", OoXmlNamespace.WpML2006MainUri)
Settings
None really, but see https://github.com/chrisfcarroll/MailMerge/blob/master/MailMerge/appsettings.json for settable limits. For commandline --showxml usage in scripts, you'll want to set appsettings.json::Logging.LogLevel to Information or higher
Doesn't do
- Anything except simple fields, complex fields, DATE, PRINTDATE & SAVEDATE fields
- Date formatting codes except a b B d D M y & h m s
- Style/Formatting codes except these Date/Time formats
- Multi-row datasources, just does 1 row at a time
Gotchas
- Interprets .Net DateTime formatting codes that aren't in the WordProcessingML spec.
NuGet
https://www.nuget.org/packages/MailMerge/
How do I create a Word document with merge fields without attaching a datasource?
https://www.cafe-encounter.net/p2247/add-merge-fields-to-a-word-document-before-adding-a-datasource
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 is compatible. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 3.1
- DocumentFormat.OpenXml (>= 2.8.1)
- Microsoft.Extensions.Configuration (>= 2.0.0)
- Microsoft.Extensions.Configuration.FileExtensions (>= 2.0.0)
- Microsoft.Extensions.Configuration.Json (>= 2.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 2.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 2.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 2.0.0)
-
.NETStandard 2.1
- DocumentFormat.OpenXml (>= 2.8.1)
- Microsoft.Extensions.Configuration (>= 2.0.0)
- Microsoft.Extensions.Configuration.FileExtensions (>= 2.0.0)
- Microsoft.Extensions.Configuration.Json (>= 2.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 2.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 2.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 2.0.0)
-
net6.0
- DocumentFormat.OpenXml (>= 2.8.1)
- Microsoft.Extensions.Configuration (>= 2.0.0)
- Microsoft.Extensions.Configuration.FileExtensions (>= 2.0.0)
- Microsoft.Extensions.Configuration.Json (>= 2.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 2.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 2.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 2.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
2.5.1 Fix: Handle mergefields that Word has split across xml elements (@AllTaken)
2.5.0 Merging an empty field now results in an empty output instead of the merge field being skipped over (@dr-consit)
Supported targets changed from netcoreapp2 to net6.0;netcoreapp3.1;netstandard2.1
2.4.0 OoXml Spec requires all fields to be treated CaseInsensitively
2.3.0 Merges multi-line (\n or \n\r) input fields into a single <w:r>
Breaking Change: Moved namespace MailMerge.Helpers -> MailMerge
2.2.1 Should not require the existence of appsettings.json
2.2.0 Handle more variations of w:instrText sequence.
2.1.0 Added support for Complex Field Character sequences.
2.0.0 Renamed component MailMerge.MailMerge to MailMerge.MailMerger