From 3d65b8862075f9773bb73e159d935431aec999f6 Mon Sep 17 00:00:00 2001 From: Lowell Stewart Date: Wed, 3 Jul 2019 21:28:50 -0600 Subject: [PATCH 1/9] support content that needs whitespace preserved --- OpenXmlPowerTools/DocumentAssembler.cs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/OpenXmlPowerTools/DocumentAssembler.cs b/OpenXmlPowerTools/DocumentAssembler.cs index f4d9673e..e8b50bb0 100644 --- a/OpenXmlPowerTools/DocumentAssembler.cs +++ b/OpenXmlPowerTools/DocumentAssembler.cs @@ -623,7 +623,7 @@ static object ContentReplacementTransform(XNode node, XElement data, TemplateErr p.Add(new XElement(W.r, para.Elements(W.r).Elements(W.rPr).FirstOrDefault(), (p.Elements().Count() > 1) ? new XElement(W.br) : null, - new XElement(W.t, line))); + new XElement(W.t, GetXmlSpaceAttribute(line), line))); } return p; } @@ -635,7 +635,7 @@ static object ContentReplacementTransform(XNode node, XElement data, TemplateErr list.Add(new XElement(W.r, run.Elements().Where(e => e.Name != W.t), (list.Count > 0) ? new XElement(W.br) : null, - new XElement(W.t, line))); + new XElement(W.t, GetXmlSpaceAttribute(line), line))); } return list; } @@ -853,5 +853,18 @@ private static string EvaluateXPathToString(XElement element, string xPath, bool return xPathSelectResult.ToString(); } + + private static XAttribute GetXmlSpaceAttribute(string textOfTextElement) + { + if (!string.IsNullOrEmpty(textOfTextElement)) + { + if (char.IsWhiteSpace(textOfTextElement[0]) || + char.IsWhiteSpace(textOfTextElement[textOfTextElement.Length - 1])) + { + return new XAttribute(XNamespace.Xml + "space", "preserve"); + } + } + return null; + } } } From a7fc61903a6cf6c6f470da867371d62843bd3748 Mon Sep 17 00:00:00 2001 From: Lowell Stewart Date: Thu, 4 Jul 2019 07:28:15 -0600 Subject: [PATCH 2/9] unit test retain whitespace when DA inserts content --- .../DocumentAssemblerTests.cs | 15 +++++++ TestFiles/DA-DataList.xml | 41 ++++++++++++++++++ TestFiles/DA240-ListPunctuation.docx | Bin 0 -> 16251 bytes 3 files changed, 56 insertions(+) create mode 100644 TestFiles/DA-DataList.xml create mode 100644 TestFiles/DA240-ListPunctuation.docx diff --git a/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs b/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs index cf62d2f0..17dc74cf 100644 --- a/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs +++ b/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs @@ -171,6 +171,20 @@ public void DA259(string name, string data, bool err) Assert.Equal(4, brCount); } + [Theory] + [InlineData("DA240-ListPunctuation.docx", "DA-DataList.xml", false)] + public void DA240(string name, string data, bool err) + { + DA101(name, data, err); + var assembledDocx = new FileInfo(Path.Combine(TestUtil.TempDir.FullName, name.Replace(".docx", "-processed-by-DocumentAssembler.docx"))); + WmlDocument afterAssembling = new WmlDocument(assembledDocx.FullName); + + // when elements are inserted that begin or end with white space (such as the list punctuation + // in this example), make sure white space is preserved + string firstParaText = afterAssembling.MainDocumentPart.Element(W.body).Elements(W.p).First().Value; + Assert.Equal("The children’s names are Greg, Marcia, Peter, Jan, Bobby and Cindy.", firstParaText); + } + [Theory] [InlineData("DA024-TrackedRevisions.docx", "DA-Data.xml")] public void DA102_Throws(string name, string data) @@ -237,6 +251,7 @@ public void DA103_UseXmlDocument(string name, string data, bool err) "The 'http://schemas.openxmlformats.org/wordprocessingml/2006/main:noVBand' attribute is not declared.", "The 'http://schemas.openxmlformats.org/wordprocessingml/2006/main:oddHBand' attribute is not declared.", "The 'http://schemas.openxmlformats.org/wordprocessingml/2006/main:oddVBand' attribute is not declared.", + "The attribute 'http://schemas.openxmlformats.org/wordprocessingml/2006/main:name' has invalid value 'useWord2013TrackBottomHyphenation'. The Enumeration constraint failed.", }; } } diff --git a/TestFiles/DA-DataList.xml b/TestFiles/DA-DataList.xml new file mode 100644 index 00000000..c7cf1b39 --- /dev/null +++ b/TestFiles/DA-DataList.xml @@ -0,0 +1,41 @@ + +<_odx> + + + Greg + 09/30/1954 + , + ; + + + Marcia + 08/05/1956 + , + ; + + + Peter + 11/07/1957 + , + ; + + + Jan + 04/29/1958 + , + ; + + + Bobby + 12/19/1960 + and + ; and + + + Cindy + 08/14/1961 + + . + + + \ No newline at end of file diff --git a/TestFiles/DA240-ListPunctuation.docx b/TestFiles/DA240-ListPunctuation.docx new file mode 100644 index 0000000000000000000000000000000000000000..ab9387ffb9bd55a0d75338194f9d129c2ca9306a GIT binary patch literal 16251 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 Date: Sat, 8 Jul 2023 14:31:26 -0600 Subject: [PATCH 3/9] Regex should ignore lastRenderedPageBreak --- OpenXmlPowerTools.Tests/OpenXmlRegexTests.cs | 43 ++++++++++++++++++++ OpenXmlPowerTools/OpenXmlRegex.cs | 2 +- OpenXmlPowerTools/UnicodeMapper.cs | 3 ++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/OpenXmlPowerTools.Tests/OpenXmlRegexTests.cs b/OpenXmlPowerTools.Tests/OpenXmlRegexTests.cs index 1921db11..282af0f5 100644 --- a/OpenXmlPowerTools.Tests/OpenXmlRegexTests.cs +++ b/OpenXmlPowerTools.Tests/OpenXmlRegexTests.cs @@ -202,6 +202,21 @@ public class OpenXmlRegexTests "; + private const string LastRenderedPageBreakXmlString = +@" + + + + ThisIsAParagraphContainingNoNaturalLi + + + + neBreaksSoTheLineBreakIsForced. + + + +"; + private static string InnerText(XContainer e) { return e.Descendants(W.r) @@ -380,6 +395,34 @@ public void CanReplaceTextWithFields() Assert.Equal("As stated in Article {__1} and this Section {__1.1}, this is described in Exhibit 4.", innerText); } } + + [Fact] + public void CanMatchDespiteLastRenderedPageBreaks() + { + XDocument partDocument = XDocument.Parse(LastRenderedPageBreakXmlString); + XElement p = partDocument.Descendants(W.p).Last(); + string innerText = InnerText(p); + + Assert.Equal("ThisIsAParagraphContainingNoNaturalLineBreaksSoTheLineBreakIsForced.", innerText); + + using (var stream = new MemoryStream()) + using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(stream, DocumentType)) + { + MainDocumentPart part = wordDocument.AddMainDocumentPart(); + part.PutXDocument(partDocument); + + IEnumerable content = partDocument.Descendants(W.p); + var regex = new Regex(@"LineBreak"); + int count = OpenXmlRegex.Replace(content, regex, "LB", null); + + p = partDocument.Descendants(W.p).Last(); + innerText = InnerText(p); + + Assert.Equal(2, count); + Assert.Equal("ThisIsAParagraphContainingNoNaturalLBsSoTheLBIsForced.", innerText); + } + } + } } diff --git a/OpenXmlPowerTools/OpenXmlRegex.cs b/OpenXmlPowerTools/OpenXmlRegex.cs index 09b77f0d..a5dc13a0 100644 --- a/OpenXmlPowerTools/OpenXmlRegex.cs +++ b/OpenXmlPowerTools/OpenXmlRegex.cs @@ -387,7 +387,7 @@ private static object WmlSearchAndReplaceTransform(XNode node, Regex regex, stri if (element.Name == W.r) { return element.Elements() - .Where(e => e.Name != W.rPr) + .Where(e => e.Name != W.rPr && e.Name != W.lastRenderedPageBreak) .Select(e => e.Name == W.t ? ((string) e).Select(c => new XElement(W.r, diff --git a/OpenXmlPowerTools/UnicodeMapper.cs b/OpenXmlPowerTools/UnicodeMapper.cs index 8cd3b95e..31eca315 100644 --- a/OpenXmlPowerTools/UnicodeMapper.cs +++ b/OpenXmlPowerTools/UnicodeMapper.cs @@ -91,6 +91,9 @@ public static string RunToString(XElement element) return SoftHyphen.ToString(); if (element.Name == W.tab) return HorizontalTabulation.ToString(); + // Ignore temporary layout markers that are not actual document content + if (element.Name == W.lastRenderedPageBreak) + return string.Empty; if (element.Name == W.fldChar) { From e1cc7e76ec84f5e6bcbd57b68874a1da8104dc1a Mon Sep 17 00:00:00 2001 From: Lowell Stewart Date: Sat, 8 Jul 2023 17:13:47 -0600 Subject: [PATCH 4/9] emulate Word's treatment of xml:space="preserve" (when converting DOCX content to Unicode strings) --- OpenXmlPowerTools.Tests/UnicodeMapperTests.cs | 34 +++++++++++++++++++ OpenXmlPowerTools/UnicodeMapper.cs | 23 ++++++++++++- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/OpenXmlPowerTools.Tests/UnicodeMapperTests.cs b/OpenXmlPowerTools.Tests/UnicodeMapperTests.cs index 562a6682..38b09b6b 100644 --- a/OpenXmlPowerTools.Tests/UnicodeMapperTests.cs +++ b/OpenXmlPowerTools.Tests/UnicodeMapperTests.cs @@ -142,6 +142,40 @@ public void CanStringifySymbols() Assert.Equal(symFromChar1.ToString(SaveOptions.None), symFromChar2.ToString(SaveOptions.None)); Assert.Equal(symFromChar1.ToString(SaveOptions.None), symFromChar3.ToString(SaveOptions.None)); } + + [Fact] + public void HonorsXmlSpace() + { + XDocument partDocument = XDocument.Parse(PreserveSpacingXmlString); + XElement p = partDocument.Descendants(W.p).Last(); + string innerText = p.Descendants(W.r) + .Select(UnicodeMapper.RunToString) + .StringConcatenate(); + Assert.Equal(@"The following space is retained: but this one is not:. Similarly these two lines should have only a space between them: Line 1! Line 2!", innerText); + } + + private const string PreserveSpacingXmlString = +@" + + + + The following space is retained: + + + but this one is not: + + + . Similarly these two lines should have only a space between them: + + + + Line 1! +Line 2! + + + + +"; } } diff --git a/OpenXmlPowerTools/UnicodeMapper.cs b/OpenXmlPowerTools/UnicodeMapper.cs index 31eca315..e5b91050 100644 --- a/OpenXmlPowerTools/UnicodeMapper.cs +++ b/OpenXmlPowerTools/UnicodeMapper.cs @@ -69,7 +69,12 @@ public static string RunToString(XElement element) // For w:t elements, we obviously want the element's value. if (element.Name == W.t) - return (string) element; + { + // Emulate Word's handling of the xml:space attribute on text elements + XAttribute spaceAttribute = element.Attribute(XNamespace.Xml + "space"); + string space = spaceAttribute != null ? spaceAttribute.Value : null; + return space == "preserve" ? (string)element : IgnoreTextSpacing((string)element); + } // Turn elements representing special characters into their corresponding // unicode characters. @@ -125,6 +130,22 @@ public static string RunToString(XElement element) return StartOfHeading.ToString(); } + /// + /// Emulate the way Word treats text elements when attribute xml:space="preserve" + /// is NOT present. + /// + /// The entire content of the w:t element. + /// The corresponding text string Word would display, print, and + /// allow to be edited. + private static string IgnoreTextSpacing(string text) + { + // all whitespace at beginning and end of entire string is ignored + // if text contains line breaks, they are ignored/replaced with a single space + return string.Join(" ", + text.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries) + ).Trim(); + } + /// /// Translate a symbol into a Unicode character, using the specified w:font attribute /// value and unicode value (represented by the w:sym element's w:char attribute), From 662a0ce6c5d764f1eff27079aff51f9623a68f02 Mon Sep 17 00:00:00 2001 From: Lowell Stewart Date: Sat, 8 Jul 2023 17:30:46 -0600 Subject: [PATCH 5/9] Unit test DocumentAssembler's xml:space handling (now that UnicodeMapper.RunToString supports it well enough to tell whether it's working or not!) --- .../DocumentAssemblerTests.cs | 28 ++++++++---- TestFiles/DA-DataList.xml | 41 ------------------ TestFiles/DA240-ListPunctuation.docx | Bin 16251 -> 0 bytes TestFiles/DA240-Whitespace.docx | Bin 0 -> 16458 bytes TestFiles/DA240-Whitespace.xml | 7 +++ 5 files changed, 27 insertions(+), 49 deletions(-) delete mode 100644 TestFiles/DA-DataList.xml delete mode 100644 TestFiles/DA240-ListPunctuation.docx create mode 100644 TestFiles/DA240-Whitespace.docx create mode 100644 TestFiles/DA240-Whitespace.xml diff --git a/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs b/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs index 17dc74cf..755d0e57 100644 --- a/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs +++ b/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs @@ -171,18 +171,22 @@ public void DA259(string name, string data, bool err) Assert.Equal(4, brCount); } - [Theory] - [InlineData("DA240-ListPunctuation.docx", "DA-DataList.xml", false)] - public void DA240(string name, string data, bool err) + [Fact] + public void DA240() { - DA101(name, data, err); + string name = "DA240-Whitespace.docx"; + DA101(name, "DA240-Whitespace.xml", false); var assembledDocx = new FileInfo(Path.Combine(TestUtil.TempDir.FullName, name.Replace(".docx", "-processed-by-DocumentAssembler.docx"))); WmlDocument afterAssembling = new WmlDocument(assembledDocx.FullName); - // when elements are inserted that begin or end with white space (such as the list punctuation - // in this example), make sure white space is preserved - string firstParaText = afterAssembling.MainDocumentPart.Element(W.body).Elements(W.p).First().Value; - Assert.Equal("The children’s names are Greg, Marcia, Peter, Jan, Bobby and Cindy.", firstParaText); + // when elements are inserted that begin or end with white space, make sure white space is preserved + string firstParaTextIncorrect = afterAssembling.MainDocumentPart.Element(W.body).Elements(W.p).First().Value; + Assert.Equal("Content may or may not have spaces: he/she; he, she; he and she.", firstParaTextIncorrect); + // warning: XElement.Value returns the string resulting from direct concatenation of all W.t elements. This is fast but ignores + // proper handling of xml:space="preserve" attributes, which Word honors when rendering content. Below we also check + // the result of UnicodeMapper.RunToString, which has been enhanced to take xml:space="preserve" into account. + string firstParaTextCorrect = InnerText(afterAssembling.MainDocumentPart.Element(W.body).Elements(W.p).First()); + Assert.Equal("Content may or may not have spaces: he/she; he, she; he and she.", firstParaTextCorrect); } [Theory] @@ -235,6 +239,14 @@ public void DA103_UseXmlDocument(string name, string data, bool err) Assert.Equal(err, returnedTemplateError); } + private static string InnerText(XContainer e) + { + return e.Descendants(W.r) + .Where(r => r.Parent.Name != W.del) + .Select(UnicodeMapper.RunToString) + .StringConcatenate(); + } + private static List s_ExpectedErrors = new List() { "The 'http://schemas.openxmlformats.org/wordprocessingml/2006/main:evenHBand' attribute is not declared.", diff --git a/TestFiles/DA-DataList.xml b/TestFiles/DA-DataList.xml deleted file mode 100644 index c7cf1b39..00000000 --- a/TestFiles/DA-DataList.xml +++ /dev/null @@ -1,41 +0,0 @@ - -<_odx> - - - Greg - 09/30/1954 - , - ; - - - Marcia - 08/05/1956 - , - ; - - - Peter - 11/07/1957 - , - ; - - - Jan - 04/29/1958 - , - ; - - - Bobby - 12/19/1960 - and - ; and - - - Cindy - 08/14/1961 - - . - - - \ No newline at end of file diff --git a/TestFiles/DA240-ListPunctuation.docx b/TestFiles/DA240-ListPunctuation.docx deleted file mode 100644 index ab9387ffb9bd55a0d75338194f9d129c2ca9306a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16251 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 H*Qfsh8m)u_ literal 0 HcmV?d00001 diff --git a/TestFiles/DA240-Whitespace.xml b/TestFiles/DA240-Whitespace.xml new file mode 100644 index 00000000..7c21bac1 --- /dev/null +++ b/TestFiles/DA240-Whitespace.xml @@ -0,0 +1,7 @@ + + + may or may not + / + , + and + From 0d341488ee09cb53bc64d518c750250b5b15ccbf Mon Sep 17 00:00:00 2001 From: Lowell Stewart Date: Sun, 9 Jul 2023 13:50:06 -0600 Subject: [PATCH 6/9] Add a couple unit tests for test cases borrowed from OXPT fork sergey-tihon/Clippit. The bugs driving these cases were fixed independently (using quite different approaches in each fork) but I still wanted to capture the test cases. --- .../DocumentAssemblerTests.cs | 36 ++ TestFiles/DA-TemplateMaior.docx | Bin 0 -> 25251 bytes TestFiles/DA-templateMaior.xml | 407 ++++++++++++++++++ TestFiles/DA-xmlerror.docx | Bin 0 -> 76004 bytes TestFiles/DA-xmlerror.xml | 296 +++++++++++++ 5 files changed, 739 insertions(+) create mode 100644 TestFiles/DA-TemplateMaior.docx create mode 100644 TestFiles/DA-templateMaior.xml create mode 100644 TestFiles/DA-xmlerror.docx create mode 100644 TestFiles/DA-xmlerror.xml diff --git a/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs b/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs index 755d0e57..54f9475a 100644 --- a/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs +++ b/OpenXmlPowerTools.Tests/DocumentAssemblerTests.cs @@ -208,6 +208,42 @@ public void DA102_Throws(string name, string data) }); } + [Fact] + public void DATemplateMaior() + { + // this test case was causing incorrect behavior of OpenXmlRegex when replacing fields in paragraphs that contained + // lastRenderedPageBreak XML elements. Recent fixes relating to UnicodeMapper and OpenXmlRegex addressed it. + string name = "DA-TemplateMaior.docx"; + DA101(name, "DA-templateMaior.xml", false); + var assembledDocx = new FileInfo(Path.Combine(TestUtil.TempDir.FullName, name.Replace(".docx", "-processed-by-DocumentAssembler.docx"))); + var afterAssembling = new WmlDocument(assembledDocx.FullName); + + var descendants = afterAssembling.MainDocumentPart.Value; + + Assert.False(descendants.Contains(">"), "Found > on text"); + } + + [Fact] + public void DAXmlError() + { + /* The assembly below would originally (prior to bug fixes) cause an exception to be thrown during assembly:  + System.ArgumentException : '', hexadecimal value 0x01, is an invalid character. + */ + string name = "DA-xmlerror.docx"; + string data = "DA-xmlerror.xml"; + + DirectoryInfo sourceDir = new DirectoryInfo("../../../../TestFiles/"); + var templateDocx = new FileInfo(Path.Combine(sourceDir.FullName, name)); + var dataFile = new FileInfo(Path.Combine(sourceDir.FullName, data)); + + var wmlTemplate = new WmlDocument(templateDocx.FullName); + var xmlData = XElement.Load(dataFile.FullName); + + var afterAssembling = DocumentAssembler.AssembleDocument(wmlTemplate, xmlData, out var returnedTemplateError); + var assembledDocx = new FileInfo(Path.Combine(TestUtil.TempDir.FullName, templateDocx.Name.Replace(".docx", "-processed-by-DocumentAssembler.docx"))); + afterAssembling.SaveAs(assembledDocx.FullName); + } + [Theory] [InlineData("DA025-TemplateDocument.docx", "DA-Data.xml", false)] public void DA103_UseXmlDocument(string name, string data, bool err) diff --git a/TestFiles/DA-TemplateMaior.docx b/TestFiles/DA-TemplateMaior.docx new file mode 100644 index 0000000000000000000000000000000000000000..bef4c9ade7d59dfc5b5a106299e6c2cc45dcd028 GIT binary patch literal 25251 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 literal 0 HcmV?d00001 diff --git a/TestFiles/DA-templateMaior.xml b/TestFiles/DA-templateMaior.xml new file mode 100644 index 00000000..1acbd7ff --- /dev/null +++ b/TestFiles/DA-templateMaior.xml @@ -0,0 +1,407 @@ + + + + + F + SIM + ANDRÉ TENROLLER DE OLIVEIRA FOLADOR + 847.518.000-00 + 1114427329 + SSP/RS + BRASILEIRO + 19/05/1995 + SOLTEIRO + + + FOLADORANDRE@GMAIL.COM + TECNICO DE ELETRONICA + + AV BERNARDI + 164 + CRISTO REDENTOR + APTO 105 + 91040-030 + PORTO ALEGRE + RS + AV BERNARDI, 164, APTO 105, CRISTO REDENTOR, PORTO ALEGRE/RS, CEP: 91040-030 + + + + + + + + + + + + MARCOS ROBERTO FOLADOR + CLAUDIA LUIZA GRAÇA TENROLLER DE OLIVEIRA + NAO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NAO + + + + + + 001 + 05 + ATO + 001 + Um + 12/08/2020 + 60.458,51 + 60.458,51 + Sessenta mil e quatrocentos e cinquenta e oito reais e cinquenta e um centavos + Sessenta mil e quatrocentos e cinquenta e oito reais e cinquenta e um centavos + 60.458,51 + 60.458,51 + Sessenta mil e quatrocentos e cinquenta e oito reais e cinquenta e um centavos + Sessenta mil e quatrocentos e cinquenta e oito reais e cinquenta e um centavos + 15,47 + Quinze inteiros e Quarenta e sete centésimos por cento + 15.47 + 12,00 + Doze por cento + TP + N + N + N + + + 002 + 01 + MENSAL + 036 + Trinta e seis + 20/09/2020 + 1.200,00 + 43.200,00 + Um mil e duzentos reais + Quarenta e três mil e duzentos reais + 1.200,00 + 43.200,00 + Um mil e duzentos reais + Quarenta e três mil e duzentos reais + 11,05 + Onze inteiros e Cinco décimos por cento + 11.05 + 12,00 + Doze por cento + TP + N + S + S + + + 003 + 09 + UNICA + 001 + Um + 20/02/2021 + 15.000,00 + 15.000,00 + Quinze mil reais + Quinze mil reais + 15.000,00 + 15.000,00 + Quinze mil reais + Quinze mil reais + 3,84 + Três inteiros e Oitenta e quatro centésimos por cento + 3.84 + 12,00 + Doze por cento + TP + N + S + S + + + 004 + 09 + UNICA + 001 + Um + 20/11/2021 + 15.000,00 + 15.000,00 + Quinze mil reais + Quinze mil reais + 15.000,00 + 15.000,00 + Quinze mil reais + Quinze mil reais + 3,84 + Três inteiros e Oitenta e quatro centésimos por cento + 3.84 + 12,00 + Doze por cento + TP + N + S + S + + + 005 + 09 + UNICA + 001 + Um + 20/05/2022 + 15.000,00 + 15.000,00 + Quinze mil reais + Quinze mil reais + 15.000,00 + 15.000,00 + Quinze mil reais + Quinze mil reais + 3,84 + Três inteiros e Oitenta e quatro centésimos por cento + 3.84 + 12,00 + Doze por cento + TP + N + S + S + + + 006 + 01 + MENSAL + 007 + Sete + 20/09/2023 + 1.200,00 + 8.400,00 + Um mil e duzentos reais + Oito mil e quatrocentos reais + 1.245,98 + 8.721,83 + Um mil e duzentos reais + Oito mil e setecentos e vinte e um reais e oitenta e três centavos + 2,15 + Dois inteiros e Quinze centésimos por cento + 2.15 + 12,00 + Doze por cento + TP + N + S + S + + + 007 + 08 + FINANCIAMENTO + 001 + Um + 30/06/2024 + 214.229,73 + 214.229,73 + Duzentos e quatorze mil e duzentos e vinte e nove reais e setenta e três centavos + Duzentos e quatorze mil e duzentos e vinte e nove reais e setenta e três centavos + 235.447,87 + 235.447,87 + Duzentos e quatorze mil e duzentos e vinte e nove reais e setenta e três centavos + Duzentos e trinta e cinco mil e quatrocentos e quarenta e sete reais e oitenta e sete centavos + 59,81 + Cinquenta e nove inteiros e Oitenta e um centésimos por cento + 59.81 + 12,00 + Doze por cento + TP + N + S + S + + + + + ATO +R$ 60.458,51 (Sessenta mil e quatrocentos e cinquenta e oito reais e cinquenta e um centavos), correspondente à 15,47% do preço. +Número de parcelas: 1 (uma) parcela com valor nominal nesta data de R$ 60.458,51 (Sessenta mil e quatrocentos e cinquenta e oito reais e cinquenta e um centavos), cujo valor será pago à vista, ou seja, em parcela única por meio de TED ou boleto bancário, ficando a quitação vinculada respectivamente a efetivação da transferência ou comprovação do pagamento do boleto bancário. +Data de vencimento: 12/08/2020 + + + PARCELAS MENSAIS +R$ 43.200,00 (Quarenta e três mil e duzentos reais). +Número de parcela(s): 036 (Trinta e seis) parcelas, mensais e sucessivas, com valor nominal nesta data de R$ 1.200,00 (Um mil e duzentos reais), cada uma. +Data do vencimento da primeira parcela: 20/09/2020. As demais parcelas terão vencimento nos mesmos dias do calendário civil dos meses imediatamente subsequentes. + + + PARCELA DE REFORÇO +R$ 15.000,00 (Quinze mil reais). +Número de parcela(s): 1 (uma) parcela com valor nominal nesta data de R$ 15.000,00 (Quinze mil reais). +Data do vencimento da parcela: 20/02/2021. + + + PARCELA DE REFORÇO +R$ 15.000,00 (Quinze mil reais). +Número de parcela(s): 1 (uma) parcela com valor nominal nesta data de R$ 15.000,00 (Quinze mil reais). +Data do vencimento da parcela: 20/11/2021. + + + PARCELA DE REFORÇO +R$ 15.000,00 (Quinze mil reais). +Número de parcela(s): 1 (uma) parcela com valor nominal nesta data de R$ 15.000,00 (Quinze mil reais). +Data do vencimento da parcela: 20/05/2022. + + + PARCELAS MENSAIS +R$ 8.400,00 (Oito mil e quatrocentos reais). +Número de parcela(s): 007 (Sete) parcelas, mensais e sucessivas, com valor nominal nesta data de R$ 1.200,00 (Um mil e duzentos reais), cada uma. +Data do vencimento da primeira parcela: 20/09/2023. As demais parcelas terão vencimento nos mesmos dias do calendário civil dos meses imediatamente subsequentes. + + + PARCELA CHAVES +R$ 214.229,73 (Duzentos e quatorze mil e duzentos e vinte e nove reais e setenta e três centavos). +Número de parcela(s): 1 (uma) parcela com valor nominal nesta data de R$ 214.229,73 (Duzentos e quatorze mil e duzentos e vinte e nove reais e setenta e três centavos) +Data do vencimento da parcela: 30/06/2024 + + + + + CPF + 436.268.820-04 + ROSANGELA DENISE RIFFEL GROEHS + 61093 + 6.253,28 + Seis mil e duzentos e cinquenta e três reais e vinte e oito centavos + + + CPF + 644.541.420-68 + GERSON DONISETTE DOS SANTOS SOUZA + 45312 + 2.344,98 + Dois mil e trezentos e quarenta e quatro reais e noventa e oito centavos + + + CPF + 011.998.550-06 + MAURICIO MOREIRA RAMOS + 48811 + 1.172,48 + Um mil e cento e setenta e dois reais e quarenta e oito centavos + + + CNPJ + 28.007.960/0001-00 + PRION PARTICIPACOES S.A. + 25278J + 9.770,75 + Nove mil e setecentos e setenta reais e setenta e cinco centavos + + + + + 10.274.663/0001-58 + + + + 0 + + + + + + + + + PORTO ALEGRE + + 22.922.412/0001-11 + MELNICK EVEN ANDIROBA EMPREENDIMENTO IMOBILIÁRIO LTDA. + + + + RUA CARLOS TREIN FILHO + + AUXILIADORA + 551 + + PORTO ALEGRE + RS + RUA CARLOS TREIN FILHO, 551, AUXILIADORA, PORTO ALEGRE/RS + + + NAO + + PORTO ALEGRE, 21 DE MAIO DE 2021 + 21 DE MAIO DE 2021 + 21/05/2021 + PORTO ALEGRE, 12 DE AGOSTO DE 2020 + 12 DE AGOSTO DE 2020 + 12/08/2020 + 286.021 + Dezenove mil e quinhentos e quarenta e um reais e quarenta e nove centavos + 19.541,49 + Nove mil e setecentos e setenta reais e setenta e cinco centavos + 9.770,75 + Nove mil e setecentos e setenta reais e setenta e quatro centavos + 9.770,74 + Trezentos e setenta e um mil e duzentos e oitenta e oito reais e vinte e quatro centavos + 371.288,24 + Trezentos e noventa mil e oitocentos e vinte e nove reais e setenta e três centavos + 390.829,73 + Localizado no oitavo pavimento, sendo o nono à esquerda de quem chega na circulação pela escada e segue à direita, com área real privativa de 28,73m², área real de uso comum de divisão não proporcional de 14,08m², área real de uso comum de divisão proporcional de 3,44m², e área real total de 46,25m², correspondendo-lhe a fração ideal de 0,000800 no terreno e nas coisas de uso comum e fim proveitoso do condomínio. + RESIDENCIAL + 802 + 080200000000028602128.007.960/000 + + + CARLOS GOMES SQUARE + + AVENIDA CARLOS GOMES + 1130 + TRÊS FIGUEIRAS + + 90480001 + PORTO ALEGRE + RS + AVENIDA CARLOS GOMES, 1130, TRÊS FIGUEIRAS, PORTO ALEGRE/RS, CEP: 90480001 + + + \ No newline at end of file diff --git a/TestFiles/DA-xmlerror.docx b/TestFiles/DA-xmlerror.docx new file mode 100644 index 0000000000000000000000000000000000000000..2a615493246d49f04738d14ab333f77d2b971c8d GIT binary patch literal 76004 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 + + + F + SIM + PAULO IVANIR CITRON + 236.713.860-53 + 6003511992 + SJS/RS + BRASILEIRO + 17/02/1956 + DIVORCIADO + + + PPICITRON@HOTMAIL.COM + ADMINISTRADOR + + R Dr Dário De Bittencourt + 295 + Vila Ipiranga + 103 Bl 5 + 91360-390 + Porto Alegre + RS + R Dr Dário De Bittencourt, 295, 103 Bl 5, Vila Ipiranga, Porto Alegre/RS, CEP: 91360-390 + + + + + + + + + + + + Angelo Perin Citron + Constancia Ana Soares + SIM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NAO + + + + + + 001 + 05 + ATO + 001 + Um + 03/09/2022 + 116.160,00 + 116.160,00 + Cento e dezesseis mil e cento e sessenta reais + Cento e dezesseis mil e cento e sessenta reais + 116.160,00 + 116.160,00 + Cento e dezesseis mil e cento e sessenta reais + Cento e dezesseis mil e cento e sessenta reais + 20,60 + Vinte inteiros e Sessenta centésimos por cento + 20.60 + 12,00 + Doze por cento + TP + N + N + N + IDENTIFICADOR DA SÉRIE ATO NÃO CONFIGURADA + + + 002 + 09 + UNICA + 001 + Um + 20/12/2022 + 250.000,00 + 250.000,00 + Duzentos e cinquenta mil reais + Duzentos e cinquenta mil reais + 250.000,00 + 250.000,00 + Duzentos e cinquenta mil reais + Duzentos e cinquenta mil reais + 50,32 + Cinquenta inteiros e Trinta e dois centésimos por cento + 50.32 + 12,00 + Doze por cento + TP + N + S + S + IDENTIFICADOR DA SÉRIE UNICA NÃO CONFIGURADA + + + 003 + 08 + FINANCIAMENTO + 001 + Um + 30/03/2023 + 164.000,00 + 164.000,00 + Cento e sessenta e quatro mil reais + Cento e sessenta e quatro mil reais + 168.712,92 + 168.712,92 + Cento e sessenta e quatro mil reais + Cento e sessenta e oito mil e setecentos e doze reais e noventa e dois centavos + 29,08 + Vinte e nove inteiros e Oito décimos por cento + 29.08 + 12,00 + Doze por cento + TP + N + S + S + IDENTIFICADOR DA SÉRIE FINANCIAMENTO NÃO CONFIGURADA + + + + + ATO +R$ 116.160,00 (Cento e dezesseis mil e cento e sessenta reais), correspondente à 20,60% do preço. +Número de parcelas: 1 (uma) parcela com valor nominal nesta data de R$ 116.160,00 (Cento e dezesseis mil e cento e sessenta reais), cujo valor será pago à vista, ou seja, em parcela única por meio de TED ou boleto bancário, ficando a quitação vinculada respectivamente a efetivação da transferência ou comprovação do pagamento do boleto bancário. +Data de vencimento: 03/09/2022 + + + PARCELA DE REFORÇO +R$ 250.000,00 (Duzentos e cinquenta mil reais). +Número de parcela(s): 1 (uma) parcela com valor nominal nesta data de R$ 250.000,00 (Duzentos e cinquenta mil reais). +Data do vencimento da parcela: 20/12/2022. + + + PARCELA CHAVES +R$ 164.000,00 (Cento e sessenta e quatro mil reais). +Número de parcela(s): 1 (uma) parcela com valor nominal nesta data de R$ 164.000,00 (Cento e sessenta e quatro mil reais) +Data do vencimento da parcela: 30/03/2023 + + + + + CPF + 608.037.380-72 + MARCO ANTONIO CIUFFO + 38.805 + 15.228,00 + Quinze mil e duzentos e vinte e oito reais + Não + - + + + + + + + + + CNPJ + 15.361.838/0001-88 + CONFIARE CIA IMOBILIARIA + 23363J + 18.612,00 + Dezoito mil e seiscentos e doze reais + Sim + 90470---470 + BRASIL + RIO GRANDE DO SUL + Porto Alegre + R Sinimbú + 14 + Petrópolis + + + + + 007 + VAGAS RES + 510 + G + 71.170,00 + Setenta e um mil e cento e setenta reais + + + + + + 10.274.663/0001-58 + + + + 0 + + + + + + + + + PORTO ALEGRE + + 22.389.891/0001-52 + MELNICK EVEN CEDRO EMPREENDIMENTO IMOBILIÁRIO LTDA. + + + + RUA CARLOS TREIN FILHO + + AUXILIADORA + 551 + + PORTO ALEGRE + RS + RUA CARLOS TREIN FILHO, 551, AUXILIADORA, PORTO ALEGRE/RS + + + NAO + + PORTO ALEGRE, 13 DE SETEMBRO DE 2022 + 13 DE SETEMBRO DE 2022 + 13/09/2022 + PORTO ALEGRE, 02 DE SETEMBRO DE 2022 + 02 DE SETEMBRO DE 2022 + 02/09/2022 + 351.173 + Trinta e três mil e oitocentos e quarenta reais + 33.840,00 + Dezoito mil e seiscentos e doze reais + 18.612,00 + Quinze mil e duzentos e vinte e oito reais + 15.228,00 + Quinhentos e trinta mil e cento e sessenta reais + 530.160,00 + Quinhentos e sessenta e quatro mil reais + 564.000,00 + Localizado na Torre D, no quarto pavimento, na circulação à direita de quem chega pelos elevadores, sendo o segundo a direita de quem ingressa na dita circulação, com área real privativa de 67,43m², área real de uso comum de divisão não proporcional de 43,51m², e área real total de 110,94m², correspondendo-lhe a fração ideal de 0,001116 no terreno e nas coisas de uso comum e fim proveitoso do condomínio. + RESIDENCIAL D + 402 + 040200000000035117315.361.838/000 + + + ZONA NORTE- TINTAS RENNER + + AV ASSIS BRASIL + 3966 + LINDÓIA + + 91010000 + PORTO ALEGRE + RS + AV ASSIS BRASIL, 3966, LINDÓIA, PORTO ALEGRE/RS, CEP: 91010000 + + + \ No newline at end of file From 8b8c3fc875c6c7e5f47d7a8d4764b2193168b248 Mon Sep 17 00:00:00 2001 From: Lowell Stewart Date: Mon, 10 Jul 2023 08:53:31 -0600 Subject: [PATCH 7/9] Master (#2) * Merge Himanshu's fix into the repository: https://github.com/EricWhiteDev/Open-Xml-PowerTools/pull/15/files * Dispose opened stream * Fix similar bugs * Closed further leaks --------- Co-authored-by: Andrei Atanasiu Co-authored-by: Markus Rudolph --- OpenXmlPowerTools/ChartUpdater.cs | 3 +- OpenXmlPowerTools/PresentationBuilder.cs | 79 +++++++++++++++++++----- OpenXmlPowerTools/PtOpenXmlDocument.cs | 11 ++-- 3 files changed, 73 insertions(+), 20 deletions(-) diff --git a/OpenXmlPowerTools/ChartUpdater.cs b/OpenXmlPowerTools/ChartUpdater.cs index 79b0f74b..18f3ad48 100644 --- a/OpenXmlPowerTools/ChartUpdater.cs +++ b/OpenXmlPowerTools/ChartUpdater.cs @@ -400,7 +400,8 @@ private static void UpdateEmbeddedWorkbook(ChartPart chartPart, ChartData chartD var embeddedSpreadsheet = chartPart.GetPartById(embeddedSpreadsheetRid); if (embeddedSpreadsheet != null) { - using (SpreadsheetDocument sDoc = SpreadsheetDocument.Open(embeddedSpreadsheet.GetStream(), true)) + using (Stream spreadsheetStream = embeddedSpreadsheet.GetStream()) + using (SpreadsheetDocument sDoc = SpreadsheetDocument.Open(spreadsheetStream, true)) { var workbookPart = sDoc.WorkbookPart; var wbRoot = workbookPart.GetXDocument().Root; diff --git a/OpenXmlPowerTools/PresentationBuilder.cs b/OpenXmlPowerTools/PresentationBuilder.cs index 9d6de5e4..c151e554 100644 --- a/OpenXmlPowerTools/PresentationBuilder.cs +++ b/OpenXmlPowerTools/PresentationBuilder.cs @@ -336,7 +336,10 @@ private static void CopyPresentationParts(PresentationDocument sourceDocument, P foreach (var legacyDocTextInfo in sourceDocument.PresentationPart.Parts.Where(p => p.OpenXmlPart.RelationshipType == "http://schemas.microsoft.com/office/2006/relationships/legacyDocTextInfo")) { LegacyDiagramTextInfoPart newPart = newDocument.PresentationPart.AddNewPart(); - newPart.FeedData(legacyDocTextInfo.OpenXmlPart.GetStream()); + using (var stream = legacyDocTextInfo.OpenXmlPart.GetStream()) + { + newPart.FeedData(stream); + } } var listOfRootChildren = newPresentation.Root.Elements().ToList(); @@ -383,7 +386,10 @@ private static XElement CreatedEmbeddedFontPart(PresentationDocument sourceDocum fpt = FontPartType.FontOdttf; var newId = "R" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, 16); var newFontPart = newDocument.PresentationPart.AddFontPart(fpt, newId); - newFontPart.FeedData(oldFontPart.GetStream()); + using (var stream = oldFontPart.GetStream()) + { + newFontPart.FeedData(stream); + } newRegular = new XElement(fontXName, new XAttribute(R.id, newId)); return newRegular; @@ -931,12 +937,18 @@ private static void CopyRelatedPartsForContentParts(PresentationDocument newDocu if (oldPartIdPair9 != null) { CustomXmlPart newPart = newDocument.PresentationPart.AddCustomXmlPart(CustomXmlPartType.CustomXml); - newPart.FeedData(oldPartIdPair9.OpenXmlPart.GetStream()); + using (var stream = oldPartIdPair9.OpenXmlPart.GetStream()) + { + newPart.FeedData(stream); + } foreach (var itemProps in oldPartIdPair9.OpenXmlPart.Parts.Where(p => p.OpenXmlPart.ContentType == "application/vnd.openxmlformats-officedocument.customXmlProperties+xml")) { var newId2 = "R" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, 16); CustomXmlPropertiesPart cxpp = newPart.AddNewPart("application/vnd.openxmlformats-officedocument.customXmlProperties+xml", newId2); - cxpp.FeedData(itemProps.OpenXmlPart.GetStream()); + using (var stream = itemProps.OpenXmlPart.GetStream()) + { + cxpp.FeedData(stream); + } } var newId = "R" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, 16); newContentPart.CreateRelationshipToPart(newPart, newId); @@ -1057,6 +1069,21 @@ private static void CopyChartObjects(ChartPart oldChart, ChartPart newChart) dataReference.Attribute(R.id).Value = newChart.GetIdOfPart(newPart); continue; } + ExtendedPart extendedPart = oldPartIdPair.OpenXmlPart as ExtendedPart; + if (extendedPart != null) + { + ExtendedPart newPart = newChart.AddExtendedPart(extendedPart.RelationshipType, extendedPart.ContentType, ".dat"); + using (Stream oldObject = extendedPart.GetStream(FileMode.Open, FileAccess.Read)) + using (Stream newObject = newPart.GetStream(FileMode.Create, FileAccess.ReadWrite)) + { + int byteCount; + byte[] buffer = new byte[65536]; + while ((byteCount = oldObject.Read(buffer, 0, 65536)) != 0) + newObject.Write(buffer, 0, byteCount); + } + dataReference.Attribute(R.id).Value = newChart.GetIdOfPart(newPart); + continue; + } EmbeddedObjectPart oldEmbeddedObjectPart = oldPartIdPair.OpenXmlPart as EmbeddedObjectPart; if (oldEmbeddedObjectPart != null) { @@ -1350,7 +1377,10 @@ private static void CopyRelatedMedia(OpenXmlPart oldContentPart, OpenXmlPart new var ct = oldPart.ContentType; var ext = Path.GetExtension(oldPart.Uri.OriginalString); MediaDataPart newPart = newContentPart.OpenXmlPackage.CreateMediaDataPart(ct, ext); - newPart.FeedData(oldPart.GetStream()); + using (var stream = oldPart.GetStream()) + { + newPart.FeedData(stream); + } string id = null; string relationshipType = null; @@ -1490,7 +1520,10 @@ private static void CopyInkPart(OpenXmlPart oldContentPart, OpenXmlPart newConte var newId = "R" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, 16); CustomXmlPart newPart = newContentPart.AddNewPart("application/inkml+xml", newId); - newPart.FeedData(oldPart.GetStream()); + using (var stream = oldPart.GetStream()) + { + newPart.FeedData(stream); + } contentPartReference.Attribute(attributeName).Value = newId; } @@ -1508,8 +1541,11 @@ private static void CopyActiveXPart(OpenXmlPart oldContentPart, OpenXmlPart newC var newId = "R" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, 16); EmbeddedControlPersistencePart newPart = newContentPart.AddNewPart("application/vnd.ms-office.activeX+xml", newId); - - newPart.FeedData(oldPart.GetStream()); + + using (var stream = oldPart.GetStream()) + { + newPart.FeedData(stream); + } activeXPartReference.Attribute(attributeName).Value = newId; if (newPart.ContentType == "application/vnd.ms-office.activeX+xml") @@ -1521,8 +1557,11 @@ private static void CopyActiveXPart(OpenXmlPart oldContentPart, OpenXmlPart newC var newId2 = "R" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, 16); EmbeddedControlPersistenceBinaryDataPart newPersistencePart = newPart.AddNewPart("application/vnd.ms-office.activeX", newId2); - - newPersistencePart.FeedData(oldPersistencePart.GetStream()); + + using (var stream = oldPersistencePart.GetStream()) + { + newPersistencePart.FeedData(stream); + } axc.Root.Attribute(R.id).Value = newId2; newPart.PutXDocument(); } @@ -1544,7 +1583,10 @@ private static void CopyLegacyDiagramText(OpenXmlPart oldContentPart, OpenXmlPar var newId = "R" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, 16); LegacyDiagramTextPart newPart = newContentPart.AddNewPart(newId); - newPart.FeedData(oldPart.GetStream()); + using (var stream = oldPart.GetStream()) + { + newPart.FeedData(stream); + } textdataReference.Attribute(attributeName).Value = newId; } @@ -1714,7 +1756,10 @@ private static void CopyExtendedPart(OpenXmlPart oldContentPart, OpenXmlPart new newPart = ((XmlSignaturePart)newContentPart).AddExtendedPart(oldPart.RelationshipType, oldPart.ContentType, fileInfo.Extension); relId = newContentPart.GetIdOfPart(newPart); - newPart.FeedData(oldPart.GetStream()); + using (Stream sourceStream = oldPart.GetStream()) + { + newPart.FeedData(sourceStream); + } extendedReference.Attribute(attributeName).Value = relId; } catch (ArgumentOutOfRangeException) @@ -1778,7 +1823,10 @@ private static void CopyRelatedSound(PresentationDocument newDocument, OpenXmlPa { AudioReferenceRelationship temp = (AudioReferenceRelationship)oldContentPart.GetReferenceRelationship(relId); MediaDataPart newSound = newDocument.CreateMediaDataPart(temp.DataPart.ContentType); - newSound.FeedData(temp.DataPart.GetStream()); + using (var stream = temp.DataPart.GetStream()) + { + newSound.FeedData(stream); + } AudioReferenceRelationship newRel = null; if (newContentPart is SlidePart) @@ -1799,7 +1847,10 @@ private static void CopyRelatedSound(PresentationDocument newDocument, OpenXmlPa { MediaReferenceRelationship temp = (MediaReferenceRelationship)oldContentPart.GetReferenceRelationship(relId); MediaDataPart newSound = newDocument.CreateMediaDataPart(temp.DataPart.ContentType); - newSound.FeedData(temp.DataPart.GetStream()); + using (var stream = temp.DataPart.GetStream()) + { + newSound.FeedData(stream); + } MediaReferenceRelationship newRel = null; if (newContentPart is SlidePart) diff --git a/OpenXmlPowerTools/PtOpenXmlDocument.cs b/OpenXmlPowerTools/PtOpenXmlDocument.cs index 86e49db3..ce2ac570 100644 --- a/OpenXmlPowerTools/PtOpenXmlDocument.cs +++ b/OpenXmlPowerTools/PtOpenXmlDocument.cs @@ -339,11 +339,12 @@ private static Type GetDocumentType(byte[] bytes) public static void SavePartAs(OpenXmlPart part, string filePath) { - Stream partStream = part.GetStream(FileMode.Open, FileAccess.Read); - byte[] partContent = new byte[partStream.Length]; - partStream.Read(partContent, 0, (int)partStream.Length); - - File.WriteAllBytes(filePath, partContent); + using (Stream partStream = part.GetStream(FileMode.Open, FileAccess.Read)) + { + byte[] partContent = new byte[partStream.Length]; + partStream.Read(partContent, 0, (int)partStream.Length); + File.WriteAllBytes(filePath, partContent); + } } } From 3e9911f01baf4205ec06502906a98bff512bab05 Mon Sep 17 00:00:00 2001 From: Lowell Stewart Date: Mon, 10 Jul 2023 09:25:56 -0600 Subject: [PATCH 8/9] re-enable skipped PtUtil unit test --- OpenXmlPowerTools.Tests/PtUtilTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenXmlPowerTools.Tests/PtUtilTests.cs b/OpenXmlPowerTools.Tests/PtUtilTests.cs index 4515e5d9..d8a0bb5a 100644 --- a/OpenXmlPowerTools.Tests/PtUtilTests.cs +++ b/OpenXmlPowerTools.Tests/PtUtilTests.cs @@ -20,7 +20,7 @@ namespace OxPt { public class PtUtilTests { - [Theory(Skip = "This is failing on AppVeyor")] + [Theory] [InlineData("PU/PU001-Test001.mht")] public void PU001(string name) { From f957cbccdeb19f73d8db7deefb8ffb79d4083a00 Mon Sep 17 00:00:00 2001 From: Lowell Stewart Date: Mon, 10 Jul 2023 10:08:50 -0600 Subject: [PATCH 9/9] Fix unit test SW002_AllDataTypes Old unit tests passed on .NET Framework but failed on .NET Core Improvement based in part on Codeuctivity/OpenXmlPowerTools --- .../SpreadsheetWriterTests.cs | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/OpenXmlPowerTools.Tests/SpreadsheetWriterTests.cs b/OpenXmlPowerTools.Tests/SpreadsheetWriterTests.cs index 5deccaa2..63ea24e4 100644 --- a/OpenXmlPowerTools.Tests/SpreadsheetWriterTests.cs +++ b/OpenXmlPowerTools.Tests/SpreadsheetWriterTests.cs @@ -286,20 +286,48 @@ public void SW002_AllDataTypes() { Cells = new Sw.CellDfn[] { + new Sw.CellDfn { + CellDataType = Sw.CellDataType.String, + Value = "date (t:d, mm-dd-yy)", + }, new Sw.CellDfn { CellDataType = Sw.CellDataType.Date, - Value = new DateTime(2012, 1, 8), + Value = new DateTime(2012, 1, 8).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff"), FormatCode = "mm-dd-yy", }, + } + }, + new Sw.RowDfn + { + Cells = new Sw.CellDfn[] + { + new Sw.CellDfn { + CellDataType = Sw.CellDataType.String, + Value = "date (t:d, d-mmm-yy)", + }, new Sw.CellDfn { CellDataType = Sw.CellDataType.Date, - Value = new DateTime(2012, 1, 9), - FormatCode = "mm-dd-yy", + Value = new DateTime(2012, 1, 9).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff"), + FormatCode = "d-mmm-yy", Bold = true, HorizontalCellAlignment = Sw.HorizontalCellAlignment.Center, }, } }, + new Sw.RowDfn + { + Cells = new Sw.CellDfn[] + { + new Sw.CellDfn { + CellDataType = Sw.CellDataType.String, + Value = "date (t:d)", + }, + new Sw.CellDfn { + CellDataType = Sw.CellDataType.Date, + Value = new DateTime(2012, 1, 11).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff"), + }, + } + }, } } }