diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs index 8ae8a6e..48276ca 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs @@ -1636,7 +1636,14 @@ if (copyDataValidations) { using (var asRange = otherCell.AsRange()) - DataValidation.CopyFrom(asRange.DataValidation); + { + var thisDv = DataValidation; + var otherDv = asRange.DataValidation; + thisDv.CopyFrom(otherDv); + thisDv.Value = GetFormulaA1(otherCell.GetFormulaR1C1(otherDv.Value)); + thisDv.MinValue = GetFormulaA1(otherCell.GetFormulaR1C1(otherDv.MinValue)); + thisDv.MaxValue = GetFormulaA1(otherCell.GetFormulaR1C1(otherDv.MaxValue)); + } } return this; diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj index 8432bdc..9212f82 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj @@ -79,6 +79,7 @@ + diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/DataValidations/DataValidationTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/DataValidations/DataValidationTests.cs index 80119d8..8c09d87 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/DataValidations/DataValidationTests.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/DataValidations/DataValidationTests.cs @@ -98,5 +98,66 @@ Assert.AreEqual(cell.DataValidation.InputTitle, "Title for D2"); Assert.AreEqual(cell.DataValidation.InputMessage, "Message for D2"); } + + [TestMethod] + public void Validation_2() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Sheet1"); + ws.Cell("A1").SetValue("A"); + ws.Cell("B1").SetDataValidation().Value = "Sheet1!A1"; + + var ws2 = wb.AddWorksheet("Sheet2"); + ws2.Cell("A1").SetValue("B"); + ws.Cell("B1").CopyTo(ws2.Cell("B1")); + + Assert.AreEqual("Sheet1!A1", ws2.Cell("B1").DataValidation.Value); + } + + [TestMethod] + public void Validation_3() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Sheet1"); + ws.Cell("A1").SetValue("A"); + ws.Cell("B1").SetDataValidation().Value = "A1"; + ws.FirstRow().InsertRowsAbove(1); + + Assert.AreEqual("A2", ws.Cell("B2").DataValidation.Value); + } + + [TestMethod] + public void Validation_4() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Sheet1"); + ws.Cell("A1").SetValue("A"); + ws.Cell("B1").SetDataValidation().Value = "A1"; + ws.Cell("B1").CopyTo(ws.Cell("B2")); + Assert.AreEqual("A2", ws.Cell("B2").DataValidation.Value); + } + + [TestMethod] + public void Validation_5() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Sheet1"); + ws.Cell("A1").SetValue("A"); + ws.Cell("B1").SetDataValidation().Value = "A1"; + ws.FirstColumn().InsertColumnsBefore(1); + + Assert.AreEqual("B1", ws.Cell("C1").DataValidation.Value); + } + + [TestMethod] + public void Validation_6() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Sheet1"); + ws.Cell("A1").SetValue("A"); + ws.Cell("B1").SetDataValidation().Value = "A1"; + ws.Cell("B1").CopyTo(ws.Cell("C1")); + Assert.AreEqual("B1", ws.Cell("C1").DataValidation.Value); + } } } diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/FormulaTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/FormulaTests.cs new file mode 100644 index 0000000..394c64f --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/FormulaTests.cs @@ -0,0 +1,28 @@ +using System; +using System.Text; +using System.Collections.Generic; +using System.Linq; +using ClosedXML.Excel; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace ClosedXML_Tests.Excel +{ + /// + /// Summary description for UnitTest1 + /// + [TestClass] + public class FormulaTests + { + + [TestMethod] + public void CopyFormula() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Sheet1"); + ws.Cell("A1").FormulaA1 = "B1"; + ws.Cell("A1").CopyTo("A2"); + Assert.AreEqual("B2", ws.Cell("A2").FormulaA1); + } + + } +}