Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions OpenXMLTemplates/Documents/TemplateDocument.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,14 @@ public void Close(bool save = false)
if (save)
WordprocessingDocument.Save();

WordprocessingDocument.Close();
//WordprocessingDocument.Close();
}

public OpenXmlPackage SaveAs(string path)
{
return WordprocessingDocument.SaveAs(path);
var clonedDoc = WordprocessingDocument.Clone(path);
clonedDoc.Save();
return clonedDoc;
}

public void RemoveControl(ContentControl contentControl)
Expand Down
56 changes: 29 additions & 27 deletions OpenXMLTemplates/OpenXMLTemplates.csproj
Original file line number Diff line number Diff line change
@@ -1,28 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>8</LangVersion>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Title>Word document templating using OpenXML SDK</Title>
<Authors>antonmmihaylov@gmail.com</Authors>
<Description>A .NET Standard Word documents templating system that doesn't need Word installed and is both designer and developer friendly</Description>
<Copyright>
</Copyright>
<PackageProjectUrl>https://github.com/antonmihaylov/OpenXmlTemplates</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/antonmihaylov/OpenXmlTemplates/blob/master/LICENSE</PackageLicenseUrl>
<RepositoryUrl>https://github.com/antonmihaylov/OpenXmlTemplates</RepositoryUrl>
<RepositoryType>Git</RepositoryType>
<PackageTags>Word Templates Automation Document OpenXML</PackageTags>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageIconUrl>https://github.com/antonmihaylov/OpenXmlTemplates/blob/master/icon.png?raw=true</PackageIconUrl>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>2.0</OldToolsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DocumentFormat.OpenXml" Version="2.9.1"/>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2"/>
</ItemGroup>
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<LangVersion>8</LangVersion>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Title>Word document templating using OpenXML SDK</Title>
<Authors>antonmmihaylov@gmail.com</Authors>
<Description>A .NET Standard Word documents templating system that doesn't need Word installed and is both designer and developer friendly</Description>
<Copyright>
</Copyright>
<PackageProjectUrl>https://github.com/antonmihaylov/OpenXmlTemplates</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/antonmihaylov/OpenXmlTemplates/blob/master/LICENSE</PackageLicenseUrl>
<RepositoryUrl>https://github.com/antonmihaylov/OpenXmlTemplates</RepositoryUrl>
<RepositoryType>Git</RepositoryType>
<PackageTags>Word Templates Automation Document OpenXML</PackageTags>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageIconUrl>https://github.com/antonmihaylov/OpenXmlTemplates/blob/master/icon.png?raw=true</PackageIconUrl>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>2.0</OldToolsVersion>
<PackageVersion>2.0.6</PackageVersion>
<Version>2.0.6</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DocumentFormat.OpenXml" Version="3.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.IO;
using NUnit.Framework;
using NUnit.Framework.Legacy;
using OpenXMLTemplates;
using OpenXMLTemplates.ControlReplacers;
using OpenXMLTemplates.Documents;
Expand All @@ -26,15 +27,15 @@ public void ReplacedConditionalDropdownContentControls()
doc.SaveAs(this.CurrentFolder() + "result.docx");


Assert.IsNull(doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled1"));
Assert.NotNull(doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled2"));
Assert.NotNull(doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled3"));
Assert.NotNull(doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled1_or_enabled2"));
Assert.NotNull(doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled3_or_enabled2"));
Assert.IsNull(doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled1_and_enabled2"));
Assert.NotNull(
ClassicAssert.IsNull(doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled1"));
ClassicAssert.NotNull(doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled2"));
ClassicAssert.NotNull(doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled3"));
ClassicAssert.NotNull(doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled1_or_enabled2"));
ClassicAssert.NotNull(doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled3_or_enabled2"));
ClassicAssert.IsNull(doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled1_and_enabled2"));
ClassicAssert.NotNull(
doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled1_not_and_enabled2"));
Assert.IsNull(
ClassicAssert.IsNull(
doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_enabled2_and_enabled3_not"));
doc.WordprocessingDocument.AssertValid();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.IO;
using NUnit.Framework;
using NUnit.Framework.Legacy;
using OpenXMLTemplates;
using OpenXMLTemplates.ControlReplacers.DropdownControlReplacers;
using OpenXMLTemplates.Documents;
Expand Down Expand Up @@ -29,13 +30,13 @@ public void ReplacedConditionalDropdownContentControls()
var c3 = doc.WordprocessingDocument.FindContentControl("conditional_isInvalid_or_isValid");


Assert.NotNull(c1);
Assert.NotNull(c2);
Assert.NotNull(c3);
ClassicAssert.NotNull(c1);
ClassicAssert.NotNull(c2);
ClassicAssert.NotNull(c3);

Assert.AreEqual("THIS IS VALID", c1.GetTextElement().Text);
Assert.AreEqual("THIS IS VALID", c2.GetTextElement().Text);
Assert.AreEqual("THIS IS VALID", c3.GetTextElement().Text);
ClassicAssert.AreEqual("THIS IS VALID", c1.GetTextElement().Text);
ClassicAssert.AreEqual("THIS IS VALID", c2.GetTextElement().Text);
ClassicAssert.AreEqual("THIS IS VALID", c3.GetTextElement().Text);
doc.WordprocessingDocument.AssertValid();
doc.SaveAs(this.CurrentFolder() + "result.docx");

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.IO;
using NUnit.Framework;
using NUnit.Framework.Legacy;
using OpenXMLTemplates;
using OpenXMLTemplates.ControlReplacers.DropdownControlReplacers;
using OpenXMLTemplates.Documents;
Expand Down Expand Up @@ -27,11 +28,11 @@ public void FindsContentControlAndReplacesSingulars()
var c1 = doc.WordprocessingDocument.FindContentControl(singularReplacer.TagName + "_sellers");
var c2 = doc.WordprocessingDocument.FindContentControl(singularReplacer.TagName + "_buyers");

Assert.NotNull(c1);
Assert.NotNull(c2);
ClassicAssert.NotNull(c1);
ClassicAssert.NotNull(c2);

Assert.AreEqual("sellers are", c1.GetTextElement().Text);
Assert.AreEqual("buyer", c2.GetTextElement().Text);
ClassicAssert.AreEqual("sellers are", c1.GetTextElement().Text);
ClassicAssert.AreEqual("buyer", c2.GetTextElement().Text);
doc.WordprocessingDocument.AssertValid();
doc.SaveAs(this.CurrentFolder() + "result.docx");

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.IO;
using NUnit.Framework;
using NUnit.Framework.Legacy;
using OpenXMLTemplates;
using OpenXMLTemplates.ControlReplacers;
using OpenXMLTemplates.Documents;
Expand Down Expand Up @@ -31,13 +32,13 @@ public void TestVariableControls()
replacer.ReplaceAll(doc, src);
doc.SaveAs(this.CurrentFolder() + "result.docx");

Assert.AreEqual("DocumentFormat.OpenXml.Wordprocessing.SdtBlock",
ClassicAssert.AreEqual("DocumentFormat.OpenXml.Wordprocessing.SdtBlock",
doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_" + "picture1").GetType()
.ToString());
Assert.AreEqual("DocumentFormat.OpenXml.Wordprocessing.SdtBlock",
ClassicAssert.AreEqual("DocumentFormat.OpenXml.Wordprocessing.SdtBlock",
doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_" + "picture2").GetType()
.ToString());
Assert.AreEqual("DocumentFormat.OpenXml.Wordprocessing.SdtBlock",
ClassicAssert.AreEqual("DocumentFormat.OpenXml.Wordprocessing.SdtBlock",
doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_" + "picture3").GetType()
.ToString());

Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.IO;
using System.Linq;
using NUnit.Framework;
using NUnit.Framework.Legacy;
using OpenXMLTemplates;
using OpenXMLTemplates.ControlReplacers;
using OpenXMLTemplates.Documents;
Expand All @@ -27,11 +28,11 @@ public void TestRepeatingControls()
replacer.ReplaceAll(doc, src);
doc.SaveAs(this.CurrentFolder() + "result.docx");

Assert.AreEqual(4,
ClassicAssert.AreEqual(4,
doc.WordprocessingDocument.ContentControls().Count(cc =>
cc.GetContentControlTag() != null && cc.GetContentControlTag().StartsWith("repeatingitem")));

Assert.AreEqual(5,
ClassicAssert.AreEqual(5,
doc.WordprocessingDocument.ContentControls().Count(cc =>
cc.GetContentControlTag() != null && cc.GetContentControlTag() == "repeating_nestedList"));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Linq;
using DocumentFormat.OpenXml.Wordprocessing;
using NUnit.Framework;
using NUnit.Framework.Legacy;
using OpenXMLTemplates;
using OpenXMLTemplates.ControlReplacers;
using OpenXMLTemplates.Documents;
Expand Down Expand Up @@ -29,31 +30,31 @@ public void TestVariableControls()
doc.SaveAs(this.CurrentFolder() + "result.docx");

foreach (var namecc in doc.WordprocessingDocument.FindContentControls(replacer.TagName + "_" + "name"))
Assert.AreEqual("Antonio Conte", namecc.GetTextElement().Text);
ClassicAssert.AreEqual("Antonio Conte", namecc.GetTextElement().Text);

Assert.AreEqual("Elm street",
ClassicAssert.AreEqual("Elm street",
doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_" + "address.street")
.GetTextElement().Text);
Assert.AreEqual("23",
ClassicAssert.AreEqual("23",
doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_" + "address.number")
.GetTextElement().Text);
Assert.AreEqual("Novakovo",
ClassicAssert.AreEqual("Novakovo",
doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_" + "address.city.name")
.GetTextElement().Text);
Assert.AreEqual("Plovdiv",
ClassicAssert.AreEqual("Plovdiv",
doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_" + "address.city.province")
.GetTextElement().Text);

var cc = doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_" + "paragraph");
Assert.AreEqual(0, cc.Descendants<Break>().Count());
ClassicAssert.AreEqual(0, cc.Descendants<Break>().Count());

//Nested
Assert.AreEqual("Elm street",
ClassicAssert.AreEqual("Elm street",
doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_" + "street").GetTextElement().Text);
Assert.AreEqual("Novakovo",
ClassicAssert.AreEqual("Novakovo",
doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_" + "name_city").GetTextElement()
.Text);
Assert.AreEqual("Plovdiv",
ClassicAssert.AreEqual("Plovdiv",
doc.WordprocessingDocument.FindContentControl(replacer.TagName + "_" + "province").GetTextElement()
.Text);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Xml.Linq;
using DocumentFormat.OpenXml.Packaging;
using NUnit.Framework;
using NUnit.Framework.Legacy;
using OpenXMLTemplates;
using OpenXMLTemplates.Utils;

Expand All @@ -18,10 +19,10 @@ public void AddsCustomXmlPart()

doc.AddOrReplaceCustomXmlPart(xData);

Assert.IsNotNull(doc.GetCustomXmlPart("XmlCustomPart"));
ClassicAssert.IsNotNull(doc.GetCustomXmlPart("XmlCustomPart"));
doc.AssertValid();

doc.Close();
//doc.Close();
}

[Test]
Expand All @@ -37,12 +38,12 @@ public void ReplacesCustomPartIfPresent()
doc.AddOrReplaceCustomXmlPart(xData2);

var foundPart = doc.GetCustomXmlPart("XmlCustomPart");
Assert.IsNotNull(foundPart);
Assert.DoesNotThrow(() => doc.GetCustomXmlParts().Single(e => e.GetNamespace() == "XmlCustomPart"));
ClassicAssert.IsNotNull(foundPart);
ClassicAssert.DoesNotThrow(() => doc.GetCustomXmlParts().Single(e => e.GetNamespace() == "XmlCustomPart"));

doc.AssertValid();

doc.Close();
//doc.Close();
}

private WordprocessingDocument GetDoc()
Expand Down
33 changes: 17 additions & 16 deletions OpenXMLTemplatesTest/EngineTest/EngineTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.IO;
using System.Linq;
using NUnit.Framework;
using NUnit.Framework.Legacy;
using OpenXMLTemplates;
using OpenXMLTemplates.Documents;
using OpenXMLTemplates.Engine;
Expand Down Expand Up @@ -35,25 +36,25 @@ string GetText(string tagName, int elementIndex)
}


Assert.AreEqual("Antoniantaz", GetText("variable_name", 0));
Assert.AreEqual("1", GetText("variable_index", 0));
Assert.AreEqual("2", GetText("variable_index", 1));
Assert.AreEqual("1", GetText("variable_index", 2));
Assert.AreEqual("2", GetText("variable_index", 3));
ClassicAssert.AreEqual("Antoniantaz", GetText("variable_name", 0));
ClassicAssert.AreEqual("1", GetText("variable_index", 0));
ClassicAssert.AreEqual("2", GetText("variable_index", 1));
ClassicAssert.AreEqual("1", GetText("variable_index", 2));
ClassicAssert.AreEqual("2", GetText("variable_index", 3));

Assert.AreEqual(4, wd.FindContentControls("repeating_streets").Count());
Assert.AreEqual(2, wd.FindContentControls("variable_city").Count());
Assert.AreEqual(9, wd.FindContentControls("variable_name").Count());
ClassicAssert.AreEqual(4, wd.FindContentControls("repeating_streets").Count());
ClassicAssert.AreEqual(2, wd.FindContentControls("variable_city").Count());
ClassicAssert.AreEqual(9, wd.FindContentControls("variable_name").Count());

Assert.AreEqual("Antoniantaz", GetText("variable_name", 1));
Assert.AreEqual("Antoniantaz", GetText("variable_name", 2));
ClassicAssert.AreEqual("Antoniantaz", GetText("variable_name", 1));
ClassicAssert.AreEqual("Antoniantaz", GetText("variable_name", 2));

Assert.AreEqual("Novigrad", GetText("variable_name", 3));
Assert.AreEqual("First street", GetText("variable_name", 4));
Assert.AreEqual("Second Street", GetText("variable_name", 5));
Assert.AreEqual("Khan", GetText("variable_name", 6));
ClassicAssert.AreEqual("Novigrad", GetText("variable_name", 3));
ClassicAssert.AreEqual("First street", GetText("variable_name", 4));
ClassicAssert.AreEqual("Second Street", GetText("variable_name", 5));
ClassicAssert.AreEqual("Khan", GetText("variable_name", 6));

Assert.AreEqual("Novigrad", GetText("variable_city.name", 0));
ClassicAssert.AreEqual("Novigrad", GetText("variable_city.name", 0));


doc.WordprocessingDocument.AssertValid();
Expand Down Expand Up @@ -83,7 +84,7 @@ public void TestRepeatingControlImagesCollectionReplace()

doc.SaveAs(this.CurrentFolder() + "result.docx");

Assert.AreEqual("DocumentFormat.OpenXml.Wordprocessing.SdtRun",
ClassicAssert.AreEqual("DocumentFormat.OpenXml.Wordprocessing.SdtRun",
doc.WordprocessingDocument.FindContentControl(imageReplacerTag + "_" + "pic").GetType()
.ToString());
}
Expand Down
6 changes: 3 additions & 3 deletions OpenXMLTemplatesTest/OpenXMLTemplatesTest.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
<OldToolsVersion>2.0</OldToolsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="nunit" Version="3.12.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.13.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
<PackageReference Include="nunit" Version="4.0.1" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OpenXMLTemplates\OpenXMLTemplates.csproj" />
Expand Down
3 changes: 2 additions & 1 deletion OpenXMLTemplatesTest/TestUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Validation;
using NUnit.Framework;
using NUnit.Framework.Legacy;

namespace OpenXMLTempaltesTest
{
Expand Down Expand Up @@ -39,7 +40,7 @@ internal static void AssertValid(this WordprocessingDocument doc)
}

TestContext.Out.WriteLine("Found {0} OpenXml errors", count);
Assert.IsEmpty(errors);
ClassicAssert.IsEmpty(errors);
}
}
}
Loading