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);
+ }
+
+ }
+}