diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/ConditionalFormats/IXLConditionalFormat.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/ConditionalFormats/IXLConditionalFormat.cs
index 9c67c00..6f91940 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/ConditionalFormats/IXLConditionalFormat.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/ConditionalFormats/IXLConditionalFormat.cs
@@ -73,14 +73,24 @@
IXLStyle WhenNotContains(String value);
IXLStyle WhenStartsWith(String value);
IXLStyle WhenEndsWith(String value);
- IXLStyle WhenEqualTo(String value);
- IXLStyle WhenNotEqualTo(String value);
+ IXLStyle WhenEquals(String value);
+ IXLStyle WhenNotEquals(String value);
IXLStyle WhenGreaterThan(String value);
IXLStyle WhenLessThan(String value);
IXLStyle WhenEqualOrGreaterThan(String value);
IXLStyle WhenEqualOrLessThan(String value);
IXLStyle WhenBetween(String minValue, String maxValue);
IXLStyle WhenNotBetween(String minValue, String maxValue);
+
+ IXLStyle WhenEquals(Double value);
+ IXLStyle WhenNotEquals(Double value);
+ IXLStyle WhenGreaterThan(Double value);
+ IXLStyle WhenLessThan(Double value);
+ IXLStyle WhenEqualOrGreaterThan(Double value);
+ IXLStyle WhenEqualOrLessThan(Double value);
+ IXLStyle WhenBetween(Double minValue, Double maxValue);
+ IXLStyle WhenNotBetween(Double minValue, Double maxValue);
+
IXLStyle WhenIsDuplicate();
IXLStyle WhenIsUnique();
IXLStyle WhenIsTrue(String formula);
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/ConditionalFormats/Save/XLCFCellIsConverter.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/ConditionalFormats/Save/XLCFCellIsConverter.cs
index e0e14be..0199071 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/ConditionalFormats/Save/XLCFCellIsConverter.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/ConditionalFormats/Save/XLCFCellIsConverter.cs
@@ -10,19 +10,19 @@
{
public ConditionalFormattingRule Convert(IXLConditionalFormat cf, int priority, XLWorkbook.SaveContext context)
{
- String val = cf.Values[1].Replace("\"", "\"\"");
+ String val = cf.Values[1];//.Replace("\"", "\"\"");
var conditionalFormattingRule = new ConditionalFormattingRule { FormatId = (UInt32)context.DifferentialFormats[cf.Style], Operator = cf.Operator.ToOpenXml(), Type = cf.ConditionalFormatType.ToOpenXml(), Priority = priority };
var formula = new Formula();
if (cf.Operator == XLCFOperator.Equal || cf.Operator == XLCFOperator.NotEqual)
- formula.Text = "\"" + val + "\"";
+ formula.Text = val;
else
formula.Text = val;
conditionalFormattingRule.Append(formula);
if(cf.Operator == XLCFOperator.Between || cf.Operator == XLCFOperator.NotBetween)
{
- var formula2 = new Formula {Text = cf.Values[2].Replace("\"", "\"\"")};
+ var formula2 = new Formula { Text = cf.Values[2] };//.Replace("\"", "\"\"")};
conditionalFormattingRule.Append(formula2);
}
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/ConditionalFormats/XLConditionalFormat.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/ConditionalFormats/XLConditionalFormat.cs
index 8fc65e2..47aef53 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/ConditionalFormats/XLConditionalFormat.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/ConditionalFormats/XLConditionalFormat.cs
@@ -150,64 +150,130 @@
Operator = XLCFOperator.EndsWith;
return Style;
}
- public IXLStyle WhenEqualTo(String value)
+
+ private String GetProperValue(String value)
{
- Values.Initialize(value);
+ return String.Format("\"{0}\"", value.Replace("\"", "\"\""));
+ }
+
+ public IXLStyle WhenEquals(String value)
+ {
+ Values.Initialize(GetProperValue(value));
Operator = XLCFOperator.Equal;
ConditionalFormatType = XLConditionalFormatType.CellIs;
return Style;
}
- public IXLStyle WhenNotEqualTo(String value)
+ public IXLStyle WhenNotEquals(String value)
{
- Values.Initialize(value);
+ Values.Initialize(GetProperValue(value));
Operator = XLCFOperator.NotEqual;
ConditionalFormatType = XLConditionalFormatType.CellIs;
return Style;
}
public IXLStyle WhenGreaterThan(String value)
{
- Values.Initialize(value);
+ Values.Initialize(GetProperValue(value));
Operator = XLCFOperator.GreaterThan;
ConditionalFormatType = XLConditionalFormatType.CellIs;
return Style;
}
public IXLStyle WhenLessThan(String value)
{
- Values.Initialize(value);
+ Values.Initialize(GetProperValue(value));
Operator = XLCFOperator.LessThan;
ConditionalFormatType = XLConditionalFormatType.CellIs;
return Style;
}
public IXLStyle WhenEqualOrGreaterThan(String value)
{
- Values.Initialize(value);
+ Values.Initialize(GetProperValue(value));
Operator = XLCFOperator.EqualOrGreaterThan;
ConditionalFormatType = XLConditionalFormatType.CellIs;
return Style;
}
public IXLStyle WhenEqualOrLessThan(String value)
{
- Values.Initialize(value);
+ Values.Initialize(GetProperValue(value));
Operator = XLCFOperator.EqualOrLessThan;
ConditionalFormatType = XLConditionalFormatType.CellIs;
return Style;
}
public IXLStyle WhenBetween(String minValue, String maxValue)
{
- Values.Initialize(minValue);
- Values.Add(maxValue);
+ Values.Initialize(GetProperValue(minValue));
+ Values.Add(GetProperValue(maxValue));
Operator = XLCFOperator.Between;
ConditionalFormatType = XLConditionalFormatType.CellIs;
return Style;
}
public IXLStyle WhenNotBetween(String minValue, String maxValue)
{
- Values.Initialize(minValue);
- Values.Add(maxValue);
+ Values.Initialize(GetProperValue(minValue));
+ Values.Add(GetProperValue(maxValue));
Operator = XLCFOperator.NotBetween;
ConditionalFormatType = XLConditionalFormatType.CellIs;
return Style;
}
+
+ public IXLStyle WhenEquals(Double value)
+ {
+ Values.Initialize(value.ToString());
+ Operator = XLCFOperator.Equal;
+ ConditionalFormatType = XLConditionalFormatType.CellIs;
+ return Style;
+ }
+ public IXLStyle WhenNotEquals(Double value)
+ {
+ Values.Initialize(value.ToString());
+ Operator = XLCFOperator.NotEqual;
+ ConditionalFormatType = XLConditionalFormatType.CellIs;
+ return Style;
+ }
+ public IXLStyle WhenGreaterThan(Double value)
+ {
+ Values.Initialize(value.ToString());
+ Operator = XLCFOperator.GreaterThan;
+ ConditionalFormatType = XLConditionalFormatType.CellIs;
+ return Style;
+ }
+ public IXLStyle WhenLessThan(Double value)
+ {
+ Values.Initialize(value.ToString());
+ Operator = XLCFOperator.LessThan;
+ ConditionalFormatType = XLConditionalFormatType.CellIs;
+ return Style;
+ }
+ public IXLStyle WhenEqualOrGreaterThan(Double value)
+ {
+ Values.Initialize(value.ToString());
+ Operator = XLCFOperator.EqualOrGreaterThan;
+ ConditionalFormatType = XLConditionalFormatType.CellIs;
+ return Style;
+ }
+ public IXLStyle WhenEqualOrLessThan(Double value)
+ {
+ Values.Initialize(value.ToString());
+ Operator = XLCFOperator.EqualOrLessThan;
+ ConditionalFormatType = XLConditionalFormatType.CellIs;
+ return Style;
+ }
+ public IXLStyle WhenBetween(Double minValue, Double maxValue)
+ {
+ Values.Initialize(minValue.ToString());
+ Values.Add(maxValue.ToString());
+ Operator = XLCFOperator.Between;
+ ConditionalFormatType = XLConditionalFormatType.CellIs;
+ return Style;
+ }
+ public IXLStyle WhenNotBetween(Double minValue, Double maxValue)
+ {
+ Values.Initialize(minValue.ToString());
+ Values.Add(maxValue.ToString());
+ Operator = XLCFOperator.NotBetween;
+ ConditionalFormatType = XLConditionalFormatType.CellIs;
+ return Style;
+ }
+
public IXLStyle WhenIsDuplicate()
{
ConditionalFormatType = XLConditionalFormatType.IsDuplicate;
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs
index a08f49c..2b2aa55 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs
@@ -1876,5 +1876,17 @@
return cf;
}
}
+
+
+ internal IXLConditionalFormat AddConditionalFormat(IXLConditionalFormat source)
+ {
+ using (var asRange = AsRange())
+ {
+ var cf = new XLConditionalFormat(asRange);
+ cf.CopyFrom(source);
+ Worksheet.ConditionalFormats.Add(cf);
+ return cf;
+ }
+ }
}
}
\ No newline at end of file
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/XLStylizedEmpty.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/XLStylizedEmpty.cs
index 9e059f9..10aff35 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/XLStylizedEmpty.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/XLStylizedEmpty.cs
@@ -9,7 +9,7 @@
{
public XLStylizedEmpty(IXLStyle defaultStyle)
{
- Style = defaultStyle;
+ Style = new XLStyle(this, defaultStyle);
}
public IXLStyle Style { get; set; }
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs
index a4b7dba..3844c2d 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs
@@ -1336,9 +1336,10 @@
{
if (formula.Text != null && conditionalFormat.ConditionalFormatType == XLConditionalFormatType.CellIs)
{
- String val = formula.Text;
- if (val.StartsWith("\"")) val = val.Substring(1, val.Length - 2);
- conditionalFormat.Values.Add(val);
+ String val = formula.Text.Replace("\"\"", "\"");
+ //if (val.StartsWith("\"")) val = val.Substring(1, val.Length - 2);
+
+ conditionalFormat.Values.Add(val);
}
}
}
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs
index 6dd02fa..5939efc 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs
@@ -1145,6 +1145,34 @@
Workbook.Worksheets.ForEach(ws => MoveNamedRangesColumns(range, columnsShifted, ws.NamedRanges));
MoveNamedRangesColumns(range, columnsShifted, Workbook.NamedRanges);
+ ShiftConditionalFormattingColumns(range, columnsShifted);
+ }
+ private void ShiftConditionalFormattingColumns(XLRange range, int columnsShifted)
+ {
+ Int32 firstColumn = range.RangeAddress.FirstAddress.ColumnNumber - columnsShifted + 1;
+ if (firstColumn <= 1) return;
+
+ Int32 lastColumn = range.RangeAddress.LastAddress.ColumnNumber - columnsShifted + 1;
+ Int32 firstRow = range.RangeAddress.FirstAddress.RowNumber;
+ Int32 lastRow = range.RangeAddress.LastAddress.RowNumber;
+ var insertedRange = Range(firstRow, firstColumn, lastRow, lastColumn);
+ var fc = insertedRange.FirstColumn();
+ var model = fc.ColumnLeft();
+ Int32 modelFirstRow = model.RangeAddress.FirstAddress.RowNumber;
+ if (ConditionalFormats.Any(cf => cf.Range.Intersects(model)))
+ {
+ for (Int32 ro = firstRow; ro <= lastRow; ro++)
+ {
+ var cellModel = model.Cell(ro - modelFirstRow + 1);
+ foreach (var cf in ConditionalFormats.Where(cf => cf.Range.Intersects(cellModel.AsRange())).ToList())
+ {
+ Range(ro, firstColumn, ro, lastColumn).AddConditionalFormat(cf);
+ }
+ }
+ }
+ insertedRange.Dispose();
+ model.Dispose();
+ fc.Dispose();
}
private void WorksheetRangeShiftedRows(XLRange range, int rowsShifted)
@@ -1171,7 +1199,34 @@
Workbook.Worksheets.ForEach(ws => MoveNamedRangesRows(range, rowsShifted, ws.NamedRanges));
MoveNamedRangesRows(range, rowsShifted, Workbook.NamedRanges);
+ ShiftConditionalFormattingRows(range, rowsShifted);
+ }
+ private void ShiftConditionalFormattingRows(XLRange range, int rowsShifted)
+ {
+ Int32 firstRow = range.RangeAddress.FirstAddress.RowNumber - rowsShifted + 1;
+ if (firstRow <= 1) return;
+ Int32 lastRow = range.RangeAddress.LastAddress.RowNumber - rowsShifted + 1;
+ Int32 firstColumn = range.RangeAddress.FirstAddress.ColumnNumber;
+ Int32 lastColumn = range.RangeAddress.LastAddress.ColumnNumber;
+ var insertedRange = Range(firstRow, firstColumn, lastRow, lastColumn);
+ var fr = insertedRange.FirstRow();
+ var model = fr.RowAbove();
+ Int32 modelFirstColumn = model.RangeAddress.FirstAddress.ColumnNumber;
+ if (ConditionalFormats.Any(cf=>cf.Range.Intersects(model)))
+ {
+ for (Int32 co = firstColumn; co <= lastColumn; co++)
+ {
+ var cellModel = model.Cell(co - modelFirstColumn + 1);
+ foreach (var cf in ConditionalFormats.Where(cf => cf.Range.Intersects(cellModel.AsRange())).ToList())
+ {
+ Range(firstRow, co, lastRow, co).AddConditionalFormat(cf);
+ }
+ }
+ }
+ insertedRange.Dispose();
+ model.Dispose();
+ fr.Dispose();
}
internal void BreakConditionalFormatsIntoCells()
diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/ConditionalFormatting/ConditionalFormatting.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/ConditionalFormatting/ConditionalFormatting.cs
index 22bd5de..ee5332d 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Examples/ConditionalFormatting/ConditionalFormatting.cs
+++ b/ClosedXML/ClosedXML/ClosedXML_Examples/ConditionalFormatting/ConditionalFormatting.cs
@@ -202,7 +202,7 @@
}
- public class CFEquals : IXLExample
+ public class CFEqualsString : IXLExample
{
public void Create(String filePath)
{
@@ -214,14 +214,33 @@
.CellBelow().SetValue("Hell")
.CellBelow().SetValue("Holl");
- ws.RangeUsed().AddConditionalFormat().WhenEqualTo("Hell")
+ ws.RangeUsed().AddConditionalFormat().WhenEquals("Hell")
.Fill.SetBackgroundColor(XLColor.Red);
workbook.SaveAs(filePath);
}
}
- public class CFNotEquals : IXLExample
+ public class CFEqualsNumber : IXLExample
+ {
+ public void Create(String filePath)
+ {
+ var workbook = new XLWorkbook();
+ var ws = workbook.AddWorksheet("Sheet1");
+
+ ws.FirstCell().SetValue(1)
+ .CellBelow().SetValue(1)
+ .CellBelow().SetValue(2)
+ .CellBelow().SetValue(3);
+
+ ws.RangeUsed().AddConditionalFormat().WhenEquals(2)
+ .Fill.SetBackgroundColor(XLColor.Red);
+
+ workbook.SaveAs(filePath);
+ }
+ }
+
+ public class CFNotEqualsString : IXLExample
{
public void Create(String filePath)
{
@@ -233,7 +252,26 @@
.CellBelow().SetValue("Hell")
.CellBelow().SetValue("Holl");
- ws.RangeUsed().AddConditionalFormat().WhenNotEqualTo("Hell")
+ ws.RangeUsed().AddConditionalFormat().WhenNotEquals("Hell")
+ .Fill.SetBackgroundColor(XLColor.Red);
+
+ workbook.SaveAs(filePath);
+ }
+ }
+
+ public class CFNotEqualsNumber : IXLExample
+ {
+ public void Create(String filePath)
+ {
+ var workbook = new XLWorkbook();
+ var ws = workbook.AddWorksheet("Sheet1");
+
+ ws.FirstCell().SetValue(1)
+ .CellBelow().SetValue(1)
+ .CellBelow().SetValue(2)
+ .CellBelow().SetValue(3);
+
+ ws.RangeUsed().AddConditionalFormat().WhenNotEquals(2)
.Fill.SetBackgroundColor(XLColor.Red);
workbook.SaveAs(filePath);
@@ -527,7 +565,7 @@
.CellRight().SetValue(3);
var range = ws.RangeUsed();
- range.AddConditionalFormat().WhenEqualTo("1").Font.SetBold();
+ range.AddConditionalFormat().WhenEquals("1").Font.SetBold();
range.InsertRowsAbove(1);
@@ -547,8 +585,8 @@
.CellRight().SetValue("2")
.CellRight().SetValue("3");
- ws.RangeUsed().AddConditionalFormat().WhenEqualTo("1").Fill.SetBackgroundColor(XLColor.Red);
- ws.Range("B2:C2").InsertRowsAbove(1);
+ ws.RangeUsed().AddConditionalFormat().WhenEquals("1").Fill.SetBackgroundColor(XLColor.Red);
+ ws.Range("B2:C2").InsertRowsBelow(1);
workbook.SaveAs(filePath);
}
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj
index 9212f82..2f53574 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj
@@ -69,6 +69,7 @@
+
@@ -215,6 +216,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Examples/ConditionalFormattingTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Examples/ConditionalFormattingTests.cs
new file mode 100644
index 0000000..bf4eb6f
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Examples/ConditionalFormattingTests.cs
@@ -0,0 +1,130 @@
+using ClosedXML_Examples;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace ClosedXML_Tests.Examples
+{
+ [TestClass]
+ public class ConditionalFormattingTests
+ {
+
+ [TestMethod]
+ public void CFColorScaleLowMidHigh()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFColorScaleLowMidHigh.xlsx");
+ }
+
+ [TestMethod]
+ public void CFColorScaleLowHigh()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFColorScaleLowHigh.xlsx");
+ }
+
+ [TestMethod]
+ public void CFStartsWith()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFStartsWith.xlsx");
+ }
+
+ [TestMethod]
+ public void CFEndsWith()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFEndsWith.xlsx");
+ }
+
+ [TestMethod]
+ public void CFIsBlank()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFIsBlank.xlsx");
+ }
+
+ [TestMethod]
+ public void CFNotBlank()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFNotBlank.xlsx");
+ }
+
+ [TestMethod]
+ public void CFIsError()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFIsError.xlsx");
+ }
+
+ [TestMethod]
+ public void CFNotError()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFNotError.xlsx");
+ }
+
+ [TestMethod]
+ public void CFContains()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFContains.xlsx");
+ }
+
+ [TestMethod]
+ public void CFNotContains()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFNotContains.xlsx");
+ }
+
+ [TestMethod]
+ public void CFEqualsString()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFEqualsString.xlsx");
+ }
+
+ [TestMethod]
+ public void CFEqualsNumber()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFEqualsNumber.xlsx");
+ }
+
+ [TestMethod]
+ public void CFNotEqualsString()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFNotEqualsString.xlsx");
+ }
+
+ [TestMethod]
+ public void CFNotEqualsNumber()
+ {
+ TestHelper.RunTestExample(@"ConditionalFormatting\CFNotEqualsNumber.xlsx");
+ }
+
+ //[TestMethod]
+ //public void XXX()
+ //{
+ // TestHelper.RunTestExample(@"ConditionalFormatting\XXX.xlsx");
+ //}
+ //
+ //[TestMethod]
+ //public void XXX()
+ //{
+ // TestHelper.RunTestExample(@"ConditionalFormatting\XXX.xlsx");
+ //}
+ //
+ //[TestMethod]
+ //public void XXX()
+ //{
+ // TestHelper.RunTestExample(@"ConditionalFormatting\XXX.xlsx");
+ //}
+ //
+ //[TestMethod]
+ //public void XXX()
+ //{
+ // TestHelper.RunTestExample(@"ConditionalFormatting\XXX.xlsx");
+ //}
+ //
+ //[TestMethod]
+ //public void XXX()
+ //{
+ // TestHelper.RunTestExample(@"ConditionalFormatting\XXX.xlsx");
+ //}
+ //
+ //[TestMethod]
+ //public void XXX()
+ //{
+ // TestHelper.RunTestExample(@"ConditionalFormatting\XXX.xlsx");
+ //}
+ }
+}
\ No newline at end of file
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFColorScaleLowHigh.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFColorScaleLowHigh.xlsx
new file mode 100644
index 0000000..07a1b95
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFColorScaleLowHigh.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFColorScaleLowMidHigh.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFColorScaleLowMidHigh.xlsx
new file mode 100644
index 0000000..4c148d2
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFColorScaleLowMidHigh.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFContains.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFContains.xlsx
new file mode 100644
index 0000000..73175c2
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFContains.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFEndsWith.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFEndsWith.xlsx
new file mode 100644
index 0000000..f6fd80f
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFEndsWith.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFEqualsNumber.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFEqualsNumber.xlsx
new file mode 100644
index 0000000..15a0978
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFEqualsNumber.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFEqualsString.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFEqualsString.xlsx
new file mode 100644
index 0000000..3c92dfc
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFEqualsString.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFIsBlank.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFIsBlank.xlsx
new file mode 100644
index 0000000..eacac5b
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFIsBlank.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFIsError.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFIsError.xlsx
new file mode 100644
index 0000000..108c9fa
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFIsError.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotBlank.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotBlank.xlsx
new file mode 100644
index 0000000..a4d867a
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotBlank.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotContains.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotContains.xlsx
new file mode 100644
index 0000000..3fbc4b8
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotContains.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotEqualsNumber.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotEqualsNumber.xlsx
new file mode 100644
index 0000000..ae6ac79
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotEqualsNumber.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotEqualsString.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotEqualsString.xlsx
new file mode 100644
index 0000000..a1c4357
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotEqualsString.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotError.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotError.xlsx
new file mode 100644
index 0000000..26de661
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFNotError.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFStartsWith.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFStartsWith.xlsx
new file mode 100644
index 0000000..9ec534f
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFStartsWith.xlsx
Binary files differ