diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs index 59408bc..6926796 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs @@ -597,10 +597,19 @@ { foreach (string area in definedName.Text.Split(',')) { - string sheetName, sheetArea; - ParseReference(area, out sheetName, out sheetArea); - if (!(sheetArea.Equals("#REF") || sheetArea.EndsWith("#REF!"))) - WorksheetsInternal.Worksheet(sheetName).PageSetup.PrintAreas.Add(sheetArea); + if (area.Contains("[")) + { + String tableName = area.Substring(0, area.IndexOf("[")); + var ws = Worksheets.First(w => (w as XLWorksheet).SheetId == definedName.LocalSheetId + 1); + ws.PageSetup.PrintAreas.Add(area); + } + else + { + string sheetName, sheetArea; + ParseReference(area, out sheetName, out sheetArea); + if (!(sheetArea.Equals("#REF") || sheetArea.EndsWith("#REF!"))) + WorksheetsInternal.Worksheet(sheetName).PageSetup.PrintAreas.Add(sheetArea); + } } } else if (name == "_xlnm.Print_Titles") diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs index e99996a..687b1a1 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs @@ -1254,6 +1254,9 @@ if (XLHelper.IsValidRangeAddress(rangeAddressStr)) return Range(new XLRangeAddress(Worksheet, rangeAddressStr)); + if (rangeAddressStr.Contains("[")) + return Table(rangeAddressStr.Substring(0, rangeAddressStr.IndexOf("["))) as XLRange; + if (NamedRanges.Any(n => String.Compare(n.Name, rangeAddressStr, true) == 0)) return (XLRange)NamedRange(rangeAddressStr).Ranges.First(); diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/DataValidations/DataValidationTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/DataValidations/DataValidationTests.cs index ee5e105..80119d8 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/DataValidations/DataValidationTests.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/DataValidations/DataValidationTests.cs @@ -48,5 +48,55 @@ Assert.AreEqual("Error", table.DataRange.FirstCell().DataValidation.ErrorTitle); } + + [TestMethod] + public void Validation_1() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Data Validation Issue"); + var cell = ws.Cell("E1"); + cell.SetValue("Value 1"); + cell = cell.CellBelow(); + cell.SetValue("Value 2"); + cell = cell.CellBelow(); + cell.SetValue("Value 3"); + cell = cell.CellBelow(); + cell.SetValue("Value 4"); + cell = cell.CellBelow(); + + ws.Cell("A1").SetValue("Cell below has Validation Only."); + cell = ws.Cell("A2"); + cell.DataValidation.List(ws.Range("$E$1:$E$4")); + + ws.Cell("B1").SetValue("Cell below has Validation with a title."); + cell = ws.Cell("B2"); + cell.DataValidation.List(ws.Range("$E$1:$E$4")); + cell.DataValidation.InputTitle = "Title for B2"; + + Assert.AreEqual(cell.DataValidation.AllowedValues, XLAllowedValues.List); + Assert.AreEqual(cell.DataValidation.Value, "'Data Validation Issue'!$E$1:$E$4"); + Assert.AreEqual(cell.DataValidation.InputTitle, "Title for B2"); + + + ws.Cell("C1").SetValue("Cell below has Validation with a message."); + cell = ws.Cell("C2"); + cell.DataValidation.List(ws.Range("$E$1:$E$4")); + cell.DataValidation.InputMessage = "Message for C2"; + + Assert.AreEqual(cell.DataValidation.AllowedValues, XLAllowedValues.List); + Assert.AreEqual(cell.DataValidation.Value, "'Data Validation Issue'!$E$1:$E$4"); + Assert.AreEqual(cell.DataValidation.InputMessage, "Message for C2"); + + ws.Cell("D1").SetValue("Cell below has Validation with title and message."); + cell = ws.Cell("D2"); + cell.DataValidation.List(ws.Range("$E$1:$E$4")); + cell.DataValidation.InputTitle = "Title for D2"; + cell.DataValidation.InputMessage = "Message for D2"; + + Assert.AreEqual(cell.DataValidation.AllowedValues, XLAllowedValues.List); + Assert.AreEqual(cell.DataValidation.Value, "'Data Validation Issue'!$E$1:$E$4"); + Assert.AreEqual(cell.DataValidation.InputTitle, "Title for D2"); + Assert.AreEqual(cell.DataValidation.InputMessage, "Message for D2"); + } } }