diff --git a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
index 991d71c..85f38cd 100644
--- a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
+++ b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
@@ -196,6 +196,7 @@
+
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Dictionary.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Dictionary.cs
new file mode 100644
index 0000000..b866775
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Dictionary.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace ClosedXML.Excel.Style
+{
+ class Dictionary
+ {
+ }
+}
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/IXLBorder.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/IXLBorder.cs
index 5656674..301867a 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/IXLBorder.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/IXLBorder.cs
@@ -23,6 +23,8 @@
{
XLBorderStyleValues OutsideBorder { set; }
IXLColor OutsideBorderColor { set; }
+ XLBorderStyleValues InsideBorder { set; }
+ IXLColor InsideBorderColor { set; }
XLBorderStyleValues LeftBorder { get; set; }
IXLColor LeftBorderColor { get; set; }
@@ -39,6 +41,8 @@
IXLStyle SetOutsideBorder(XLBorderStyleValues value);
IXLStyle SetOutsideBorderColor(IXLColor value);
+ IXLStyle SetInsideBorder(XLBorderStyleValues value);
+ IXLStyle SetInsideBorderColor(IXLColor value);
IXLStyle SetLeftBorder(XLBorderStyleValues value);
IXLStyle SetLeftBorderColor(IXLColor value);
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/XLBorder.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/XLBorder.cs
index 839b9e0..82c924d 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/XLBorder.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/XLBorder.cs
@@ -3,6 +3,8 @@
namespace ClosedXML.Excel
{
+ using System.Collections.Generic;
+
internal class XLBorder : IXLBorder
{
private readonly IXLStylized _container;
@@ -76,6 +78,66 @@
}
}
+ public XLBorderStyleValues InsideBorder
+ {
+ set
+ {
+ if (_container == null || _container.UpdatingStyle) return;
+
+ foreach (IXLRange r in _container.RangesUsed)
+ {
+ Dictionary topBorders = new Dictionary();
+ r.FirstRow().Cells().ForEach(c=>topBorders.Add(c.Address.ColumnNumber - r.RangeAddress.FirstAddress.ColumnNumber + 1, c.Style.Border.TopBorder));
+
+ Dictionary bottomBorders = new Dictionary();
+ r.LastRow().Cells().ForEach(c => bottomBorders.Add(c.Address.ColumnNumber - r.RangeAddress.FirstAddress.ColumnNumber + 1, c.Style.Border.BottomBorder));
+
+ Dictionary leftBorders = new Dictionary();
+ r.FirstColumn().Cells().ForEach(c => leftBorders.Add(c.Address.RowNumber - r.RangeAddress.FirstAddress.RowNumber + 1, c.Style.Border.LeftBorder));
+
+ Dictionary rightBorders = new Dictionary();
+ r.LastColumn().Cells().ForEach(c => rightBorders.Add(c.Address.RowNumber - r.RangeAddress.FirstAddress.RowNumber + 1, c.Style.Border.RightBorder));
+
+ r.Cells().Style.Border.OutsideBorder = value;
+
+ topBorders.ForEach(kp => r.FirstRow().Cell(kp.Key).Style.Border.TopBorder = kp.Value);
+ bottomBorders.ForEach(kp => r.LastRow().Cell(kp.Key).Style.Border.BottomBorder = kp.Value);
+ leftBorders.ForEach(kp => r.FirstColumn().Cell(kp.Key).Style.Border.LeftBorder = kp.Value);
+ rightBorders.ForEach(kp => r.LastColumn().Cell(kp.Key).Style.Border.RightBorder = kp.Value);
+ }
+ }
+ }
+
+ public IXLColor InsideBorderColor
+ {
+ set
+ {
+ if (_container == null || _container.UpdatingStyle) return;
+
+ foreach (IXLRange r in _container.RangesUsed)
+ {
+ Dictionary topBorders = new Dictionary();
+ r.FirstRow().Cells().ForEach(c => topBorders.Add(c.Address.ColumnNumber - r.RangeAddress.FirstAddress.ColumnNumber + 1, c.Style.Border.TopBorderColor));
+
+ Dictionary bottomBorders = new Dictionary();
+ r.LastRow().Cells().ForEach(c => bottomBorders.Add(c.Address.ColumnNumber - r.RangeAddress.FirstAddress.ColumnNumber + 1, c.Style.Border.BottomBorderColor));
+
+ Dictionary leftBorders = new Dictionary();
+ r.FirstColumn().Cells().ForEach(c => leftBorders.Add(c.Address.RowNumber - r.RangeAddress.FirstAddress.RowNumber + 1, c.Style.Border.LeftBorderColor));
+
+ Dictionary rightBorders = new Dictionary();
+ r.LastColumn().Cells().ForEach(c => rightBorders.Add(c.Address.RowNumber - r.RangeAddress.FirstAddress.RowNumber + 1, c.Style.Border.RightBorderColor));
+
+ r.Cells().Style.Border.OutsideBorderColor = value;
+
+ topBorders.ForEach(kp => r.FirstRow().Cell(kp.Key).Style.Border.TopBorderColor = kp.Value);
+ bottomBorders.ForEach(kp => r.LastRow().Cell(kp.Key).Style.Border.BottomBorderColor = kp.Value);
+ leftBorders.ForEach(kp => r.FirstColumn().Cell(kp.Key).Style.Border.LeftBorderColor = kp.Value);
+ rightBorders.ForEach(kp => r.LastColumn().Cell(kp.Key).Style.Border.RightBorderColor = kp.Value);
+ }
+ }
+ }
+
public XLBorderStyleValues LeftBorder
{
get { return _leftBorder; }
@@ -263,6 +325,18 @@
return _container.Style;
}
+ public IXLStyle SetInsideBorder(XLBorderStyleValues value)
+ {
+ InsideBorder = value;
+ return _container.Style;
+ }
+
+ public IXLStyle SetInsideBorderColor(IXLColor value)
+ {
+ InsideBorderColor = value;
+ return _container.Style;
+ }
+
public IXLStyle SetLeftBorder(XLBorderStyleValues value)
{
LeftBorder = value;
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj
index 099c415..3f1f0f6 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj
@@ -76,6 +76,7 @@
+
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/StylesTest.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/StylesTest.cs
new file mode 100644
index 0000000..a19ac80
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/StylesTest.cs
@@ -0,0 +1,73 @@
+using System;
+using System.IO;
+using System.Text;
+using System.Collections.Generic;
+using System.Linq;
+using ClosedXML.Excel;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace ClosedXML_Tests.Excel.Misc
+{
+ ///
+ /// Summary description for UnitTest1
+ ///
+ [TestClass]
+ public class StylesTest
+ {
+ [TestMethod]
+ public void InsideBorderTest()
+ {
+ var wb = new XLWorkbook();
+ var ws = wb.AddWorksheet("Sheet1");
+ var range = ws.Range("B2:D4");
+
+ SetupBorders(range);
+
+ range.Style.Border.InsideBorder = XLBorderStyleValues.Thin;
+ range.Style.Border.InsideBorderColor = XLColor.Red;
+
+ var center = range.Cell(2, 2);
+
+ Assert.AreEqual(XLColor.Red, center.Style.Border.TopBorderColor);
+ Assert.AreEqual(XLColor.Red, center.Style.Border.BottomBorderColor);
+ Assert.AreEqual(XLColor.Red, center.Style.Border.LeftBorderColor);
+ Assert.AreEqual(XLColor.Red, center.Style.Border.RightBorderColor);
+
+ Assert.AreEqual(XLBorderStyleValues.None, range.FirstRow().Cell(1).Style.Border.TopBorder);
+ Assert.AreEqual(XLBorderStyleValues.Thick, range.FirstRow().Cell(2).Style.Border.TopBorder);
+ Assert.AreEqual(XLBorderStyleValues.Double, range.FirstRow().Cell(3).Style.Border.TopBorder);
+
+ Assert.AreEqual(XLBorderStyleValues.None, range.LastRow().Cell(1).Style.Border.BottomBorder);
+ Assert.AreEqual(XLBorderStyleValues.Thick, range.LastRow().Cell(2).Style.Border.BottomBorder);
+ Assert.AreEqual(XLBorderStyleValues.Double, range.LastRow().Cell(3).Style.Border.BottomBorder);
+
+ Assert.AreEqual(XLBorderStyleValues.None, range.FirstColumn().Cell(1).Style.Border.LeftBorder);
+ Assert.AreEqual(XLBorderStyleValues.Thick, range.FirstColumn().Cell(2).Style.Border.LeftBorder);
+ Assert.AreEqual(XLBorderStyleValues.Double, range.FirstColumn().Cell(3).Style.Border.LeftBorder);
+
+ Assert.AreEqual(XLBorderStyleValues.None, range.LastColumn().Cell(1).Style.Border.RightBorder);
+ Assert.AreEqual(XLBorderStyleValues.Thick, range.LastColumn().Cell(2).Style.Border.RightBorder);
+ Assert.AreEqual(XLBorderStyleValues.Double, range.LastColumn().Cell(3).Style.Border.RightBorder);
+ }
+
+ private static void SetupBorders(IXLRange range)
+ {
+ range.FirstRow().Cell(1).Style.Border.TopBorder = XLBorderStyleValues.None;
+ range.FirstRow().Cell(2).Style.Border.TopBorder = XLBorderStyleValues.Thick;
+ range.FirstRow().Cell(3).Style.Border.TopBorder = XLBorderStyleValues.Double;
+
+ range.LastRow().Cell(1).Style.Border.BottomBorder = XLBorderStyleValues.None;
+ range.LastRow().Cell(2).Style.Border.BottomBorder = XLBorderStyleValues.Thick;
+ range.LastRow().Cell(3).Style.Border.BottomBorder = XLBorderStyleValues.Double;
+
+ range.FirstColumn().Cell(1).Style.Border.LeftBorder = XLBorderStyleValues.None;
+ range.FirstColumn().Cell(2).Style.Border.LeftBorder = XLBorderStyleValues.Thick;
+ range.FirstColumn().Cell(3).Style.Border.LeftBorder = XLBorderStyleValues.Double;
+
+ range.LastColumn().Cell(1).Style.Border.RightBorder = XLBorderStyleValues.None;
+ range.LastColumn().Cell(2).Style.Border.RightBorder = XLBorderStyleValues.Thick;
+ range.LastColumn().Cell(3).Style.Border.RightBorder = XLBorderStyleValues.Double;
+ }
+
+ }
+}