Skip to content

Commit c246dbc

Browse files
authored
Added more checks on the ExcelCustomXml.Save method - #2254 (#2264)
1 parent 158f1da commit c246dbc

3 files changed

Lines changed: 25 additions & 8 deletions

File tree

src/EPPlus/Data/CustomXml/ExcelCustomXml.cs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ internal XmlDocument PropertiesXml
4444
}
4545
internal ExcelCustomXml()
4646
{
47+
SchemasReferences = [Schemas.schemaDataMashup];
48+
CustomXml = new XmlDocument();
4749
}
4850
internal ExcelCustomXml(ZipPackagePart part)
4951
{
@@ -107,6 +109,7 @@ internal void Save(ExcelPackage pck)
107109
var nsm = CreateNsm();
108110
_xmlHelper = XmlHelperFactory.Create(nsm, PropertiesXml.DocumentElement.SelectSingleNode("ds:schemaRefs", nsm));
109111
}
112+
110113
if (_xmlHelper != null)
111114
{
112115
_xmlHelper.TopNode.InnerXml = "";
@@ -117,15 +120,21 @@ internal void Save(ExcelPackage pck)
117120
_xmlHelper.TopNode.AppendChild(schemaRefNode);
118121
}
119122
}
120-
var xmlSettings = new XmlWriterSettings();
121123

122-
var stream = Part.GetStream(FileMode.Create, FileAccess.Write);
123-
var xmlWriter = XmlWriter.Create(stream, xmlSettings);
124-
CustomXml.Save(xmlWriter);
124+
var xmlSettings = new XmlWriterSettings();
125125

126-
stream = PropertiesPart.GetStream(FileMode.Create, FileAccess.Write);
127-
xmlWriter = XmlWriter.Create(stream, xmlSettings);
128-
PropertiesXml.Save(xmlWriter);
126+
if (Part != null)
127+
{
128+
var stream = Part.GetStream(FileMode.Create, FileAccess.Write);
129+
var xmlWriter = XmlWriter.Create(stream, xmlSettings);
130+
CustomXml.Save(xmlWriter);
131+
}
132+
if (PropertiesPart != null)
133+
{
134+
var stream = PropertiesPart.GetStream(FileMode.Create, FileAccess.Write);
135+
var xmlWriter = XmlWriter.Create(stream, xmlSettings);
136+
PropertiesXml.Save(xmlWriter);
137+
}
129138
}
130139
}
131140
}

src/EPPlus/Data/PowerQuery/ExcelPowerQuerySettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ internal void Save(ExcelCustomXmlCollection customXml)
266266

267267
if (cx == null)
268268
{
269-
cx = new ExcelCustomXml() { SchemasReferences = { Schemas.schemaDataMashup}, CustomXml = new XmlDocument() };
269+
cx = new ExcelCustomXml();
270270
}
271271

272272
cx.CustomXml.LoadXml($"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><DataMashup xmlns=\"{Schemas.schemaDataMashup}\">{Convert.ToBase64String(retMs.ToArray())}</DataMashup>");

src/EPPlusTest/Issues/PackageIssues.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,5 +153,13 @@ public void i2235()
153153
sheet.Calculate(o => o.EnableUnicodeAwareStringOperations = true);
154154
SaveAndCleanup(package);
155155
}
156+
[TestMethod]
157+
public void XmlIssue()
158+
{
159+
using var package = OpenTemplatePackage("test external connection.xlsx");
160+
package.Workbook.CalculateAllPivotTables();
161+
162+
SaveAndCleanup(package);
163+
}
156164
}
157165
}

0 commit comments

Comments
 (0)