diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs index aa8853d..5e52fb3 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs @@ -328,7 +328,7 @@ { string sheetName, sheetArea; ParseReference(area, out sheetName, out sheetArea); - if (!sheetArea.Equals("#REF")) + if (!(sheetArea.Equals("#REF") || sheetArea.EndsWith("#REF!"))) WorksheetsInternal.Worksheet(sheetName).PageSetup.PrintAreas.Add(sheetArea); } } @@ -340,7 +340,7 @@ { string text = definedName.Text; - if (!text.Equals("#REF")) + if (!(text.Equals("#REF") || text.EndsWith("#REF!"))) { var localSheetId = definedName.LocalSheetId; var comment = definedName.Comment; @@ -382,12 +382,14 @@ // either $A:$X => true or $1:$99 => false private static bool IsColReference(string sheetArea) { - return char.IsLetter(sheetArea[1]); + char c = sheetArea[0] == '$' ? sheetArea[1] : sheetArea[0]; + return char.IsLetter(c); } private static bool IsRowReference(string sheetArea) { - return char.IsNumber(sheetArea[1]); + char c = sheetArea[0] == '$' ? sheetArea[1] : sheetArea[0]; + return char.IsNumber(c); } private static void ParseReference(string item, out string sheetName, out string sheetArea) diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index f2cb799..aecc2f9 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -504,6 +504,15 @@ definedName.Text = definedNameText.Substring(0, definedNameText.Length - 1); definedNames.AppendChild(definedName); } + + if (worksheet.AutoFilterRange != null) + { + var definedName = new DefinedName { Name = "_xlnm._FilterDatabase", LocalSheetId = sheetId }; + definedName.Text = "'" + worksheet.Name + "'!" + worksheet.AutoFilterRange.RangeAddress.FirstAddress.ToStringFixed() + + ":" + worksheet.AutoFilterRange.RangeAddress.LastAddress.ToStringFixed(); + definedName.Hidden = BooleanValue.FromBoolean(true); + definedNames.AppendChild(definedName); + } foreach (IXLNamedRange nr in worksheet.NamedRanges) { @@ -569,32 +578,33 @@ definedNames.AppendChild(definedName); } - if (workbook.DefinedNames == null) - workbook.DefinedNames = new DefinedNames(); + workbook.DefinedNames = definedNames; + //if (workbook.DefinedNames == null) + // workbook.DefinedNames = new DefinedNames(); - foreach (DefinedName dn in definedNames) - { - String dnName = dn.Name.Value; - var dnLocalSheetId = dn.LocalSheetId; - var existingDefinedName = workbook.DefinedNames - .Elements() - .FirstOrDefault(d => - String.Compare(d.Name.Value, dnName, true) == 0 - && ( - (d.LocalSheetId != null && dnLocalSheetId != null && - d.LocalSheetId.InnerText == dnLocalSheetId.InnerText) - || d.LocalSheetId == null - || dnLocalSheetId == null) - ); - if (existingDefinedName != null) - { - existingDefinedName.Text = dn.Text; - existingDefinedName.LocalSheetId = dn.LocalSheetId; - existingDefinedName.Comment = dn.Comment; - } - else - workbook.DefinedNames.AppendChild(dn.CloneNode(true)); - } + //foreach (DefinedName dn in definedNames) + //{ + // String dnName = dn.Name.Value; + // var dnLocalSheetId = dn.LocalSheetId; + // var existingDefinedName = workbook.DefinedNames + // .Elements() + // .FirstOrDefault(d => + // String.Compare(d.Name.Value, dnName, true) == 0 + // && ( + // (d.LocalSheetId != null && dnLocalSheetId != null && + // d.LocalSheetId.InnerText == dnLocalSheetId.InnerText) + // || d.LocalSheetId == null + // || dnLocalSheetId == null) + // ); + // if (existingDefinedName != null) + // { + // existingDefinedName.Text = dn.Text; + // existingDefinedName.LocalSheetId = dn.LocalSheetId; + // existingDefinedName.Comment = dn.Comment; + // } + // else + // workbook.DefinedNames.AppendChild(dn.CloneNode(true)); + //} if (workbook.CalculationProperties == null) workbook.CalculationProperties = new CalculationProperties {CalculationId = 125725U}; diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/AutoFilter.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/AutoFilter.xlsx index 124a684..b518932 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/AutoFilter.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/AutoFilter.xlsx Binary files differ