Browse Source

Add file that failed regression tests as a unit test.

pull/1584/head
Antony Liu 2 months ago
parent
commit
c235749517
  1. 42
      OpenXmlFormats/Spreadsheet/Styles/CT_Dxfs.cs
  2. 1
      ooxml/POIXMLDocumentPart.cs
  3. 2
      ooxml/XSSF/UserModel/XSSFSheet.cs
  4. 3
      ooxml/XSSF/UserModel/XSSFTableStyle.cs
  5. 13
      testcases/ooxml/XSSF/Model/TestStylesTable.cs
  6. BIN
      testcases/test-data/spreadsheet/style-alternate-content.xlsx

42
OpenXmlFormats/Spreadsheet/Styles/CT_Dxfs.cs

@ -12,7 +12,7 @@ namespace NPOI.OpenXmlFormats.Spreadsheet
public class CT_Dxfs
{
private Dictionary<int, string> dictAlternateContent = [];
private List<CT_Dxf> dxfField;
private uint countField;
@ -23,12 +23,38 @@ namespace NPOI.OpenXmlFormats.Spreadsheet
if (node == null)
return null;
CT_Dxfs ctObj = new CT_Dxfs();
ctObj.InnerXml = node.InnerXml;
ctObj.count = XmlHelper.ReadUInt(node.Attributes["count"]);
ctObj.dxfField = new List<CT_Dxf>();
int index = 0;
foreach (XmlNode childNode in node.ChildNodes)
{
if (childNode.LocalName == "dxf")
ctObj.dxf.Add(CT_Dxf.Parse(childNode, namespaceManager));
else if(childNode.LocalName == "AlternateContent")
{
//styleSheet:dxfs maybe have schema like this
//mc:AlternateContent
// mc:Choice
// x:dxf
// mc:Fallback
// x:dxf
foreach (XmlNode acChildNode in childNode.ChildNodes)
{
if (acChildNode.LocalName == "Fallback")
{
foreach(XmlNode fbChild in acChildNode.ChildNodes)
{
if(fbChild.LocalName == "dxf")
{
ctObj.dxf.Add(CT_Dxf.Parse(fbChild, namespaceManager));
}
}
}
}
ctObj.dictAlternateContent.Add(index, childNode.OuterXml);
}
index ++;
}
return ctObj;
}
@ -43,10 +69,17 @@ namespace NPOI.OpenXmlFormats.Spreadsheet
if (this.dxf.Count > 0)
{
sw.Write(">");
foreach (CT_Dxf x in this.dxf)
for(int i=0; i<this.dxf.Count;i++)
{
x.Write(sw, "dxf");
if(dictAlternateContent.TryGetValue(i, out string value))
sw.Write(value);
else
dxf[i].Write(sw, "dxf");
}
//foreach(CT_Dxf x in this.dxf)
//{
// x.Write(sw, "dxf");
//}
sw.Write(string.Format("</{0}>", nodeName));
}
else
@ -59,6 +92,9 @@ namespace NPOI.OpenXmlFormats.Spreadsheet
public CT_Dxfs()
{
}
public string InnerXml { get; set;}
[XmlElement]
public List<CT_Dxf> dxf
{

1
ooxml/POIXMLDocumentPart.cs

@ -249,6 +249,7 @@ namespace NPOI
XmlNamespaceManager ns = new XmlNamespaceManager(nt);
ns.AddNamespace(string.Empty, PackageNamespaces.SCHEMA_MAIN);
ns.AddNamespace("d", PackageNamespaces.SCHEMA_MAIN);
ns.AddNamespace("x", PackageNamespaces.SCHEMA_MAIN);
ns.AddNamespace("a", PackageNamespaces.SCHEMA_DRAWING);
ns.AddNamespace("xdr", PackageNamespaces.SCHEMA_SHEETDRAWINGS);
ns.AddNamespace("r", PackageNamespaces.SCHEMA_RELATIONSHIPS);

2
ooxml/XSSF/UserModel/XSSFSheet.cs

@ -2222,7 +2222,7 @@ namespace NPOI.XSSF.UserModel
double width = (col == null)
? DefaultColumnWidth
: col.Width;
return (int)Math.Round(width * 256, 2);
return Math.Round(width * 256, 2);
}
/// <summary>

3
ooxml/XSSF/UserModel/XSSFTableStyle.cs

@ -27,8 +27,7 @@ namespace NPOI.OOXML.XSSF.UserModel
if (element.dxfIdSpecified)
{
int idx = (int)element.dxfId;
CT_Dxf dxf;
dxf = dxfList[idx];
CT_Dxf dxf = dxfList[idx];
int stripeSize = 0;
if (element.size!=0) stripeSize = (int)element.size;
if (dxf != null) dstyle = new XSSFDxfStyleProvider(dxf, stripeSize, colorMap);

13
testcases/ooxml/XSSF/Model/TestStylesTable.cs

@ -326,7 +326,7 @@ namespace TestCases.XSSF.Model
}
[Test]
public void addDataFormatsBeyondUpperLimit()
public void AddDataFormatsBeyondUpperLimit()
{
XSSFWorkbook wb = new XSSFWorkbook();
@ -360,7 +360,7 @@ namespace TestCases.XSSF.Model
}
[Test]
public void decreaseUpperLimitBelowCurrentNumDataFormats()
public void DecreaseUpperLimitBelowCurrentNumDataFormats()
{
XSSFWorkbook wb = new XSSFWorkbook();
@ -392,6 +392,15 @@ namespace TestCases.XSSF.Model
wb.Close();
}
}
[Test]
public void TestLoadWithAlternateContent()
{
XSSFWorkbook workbook = XSSFTestDataSamples.OpenSampleWorkbook("style-alternate-content.xlsx");
ClassicAssert.IsNotNull(workbook.GetStylesSource());
StylesTable st = workbook.GetStylesSource();
ClassicAssert.IsNotNull(XSSFTestDataSamples.WriteOutAndReadBack(workbook));
}
}
}

BIN
testcases/test-data/spreadsheet/style-alternate-content.xlsx

Loading…
Cancel
Save