MailMerge 2.5.0
See the version list below for details.
dotnet add package MailMerge --version 2.5.0
NuGet\Install-Package MailMerge -Version 2.5.0
<PackageReference Include="MailMerge" Version="2.5.0" />
paket add MailMerge --version 2.5.0
#r "nuget: MailMerge, 2.5.0"
// Install MailMerge as a Cake Addin #addin nuget:?package=MailMerge&version=2.5.0 // Install MailMerge as a Cake Tool #tool nuget:?package=MailMerge&version=2.5.0
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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.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.0 Merging an empty field now results in an empty output instead of the merge field being skipped over
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