diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/XLBorder.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/XLBorder.cs index f4cbf63..c3234e6 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/XLBorder.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/XLBorder.cs @@ -52,28 +52,45 @@ { if (_container == null || _container.UpdatingStyle) return; - foreach (IXLRange r in _container.RangesUsed) + var wsContainer = _container as XLWorksheet; + if (wsContainer != null) { - r.FirstColumn().Style.Border.LeftBorder = value; - r.LastColumn().Style.Border.RightBorder = value; - r.FirstRow().Style.Border.TopBorder = value; - r.LastRow().Style.Border.BottomBorder = value; + wsContainer.CellsUsed().Style.Border.SetOutsideBorder(value); + } + else + { + foreach (IXLRange r in _container.RangesUsed) + { + r.FirstColumn().Style.Border.LeftBorder = value; + r.LastColumn().Style.Border.RightBorder = value; + r.FirstRow().Style.Border.TopBorder = value; + r.LastRow().Style.Border.BottomBorder = value; + } } } } + public IXLColor OutsideBorderColor { set { if (_container == null || _container.UpdatingStyle) return; - foreach (IXLRange r in _container.RangesUsed) + var wsContainer = _container as XLWorksheet; + if (wsContainer != null) { - r.FirstColumn().Style.Border.LeftBorderColor = value; - r.LastColumn().Style.Border.RightBorderColor = value; - r.FirstRow().Style.Border.TopBorderColor = value; - r.LastRow().Style.Border.BottomBorderColor = value; + wsContainer.CellsUsed().Style.Border.SetOutsideBorderColor(value); + } + else + { + foreach (IXLRange r in _container.RangesUsed) + { + r.FirstColumn().Style.Border.LeftBorderColor = value; + r.LastColumn().Style.Border.RightBorderColor = value; + r.FirstRow().Style.Border.TopBorderColor = value; + r.LastRow().Style.Border.BottomBorderColor = value; + } } } } @@ -84,26 +101,53 @@ { if (_container == null || _container.UpdatingStyle) return; - foreach (IXLRange r in _container.RangesUsed) + var wsContainer = _container as XLWorksheet; + if (wsContainer != null) { - Dictionary topBorders = new Dictionary(); - r.FirstRow().Cells().ForEach(c=>topBorders.Add(c.Address.ColumnNumber - r.RangeAddress.FirstAddress.ColumnNumber + 1, c.Style.Border.TopBorder)); + wsContainer.CellsUsed().Style.Border.SetOutsideBorder(value); + wsContainer.UpdatingStyle = true; + wsContainer.Style.Border.SetTopBorder(value); + wsContainer.Style.Border.SetBottomBorder(value); + wsContainer.Style.Border.SetLeftBorder(value); + wsContainer.Style.Border.SetRightBorder(value); + wsContainer.UpdatingStyle = false; + } + else + { + 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 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)); + Dictionary leftBorders = new Dictionary(); + r.FirstColumn().Cells().ForEach( + c => + leftBorders.Add(c.Address.RowNumber - r.RangeAddress.FirstAddress.RowNumber + 1, + c.Style.Border.LeftBorder)); - r.Cells().Style.Border.OutsideBorder = value; + Dictionary rightBorders = new Dictionary(); + r.LastColumn().Cells().ForEach( + c => + rightBorders.Add(c.Address.RowNumber - r.RangeAddress.FirstAddress.RowNumber + 1, + c.Style.Border.RightBorder)); - 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); + 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); + } } } } @@ -114,26 +158,60 @@ { if (_container == null || _container.UpdatingStyle) return; - foreach (IXLRange r in _container.RangesUsed) + var wsContainer = _container as XLWorksheet; + if (wsContainer != null) { - Dictionary topBorders = new Dictionary(); - r.FirstRow().Cells().ForEach(c => topBorders.Add(c.Address.ColumnNumber - r.RangeAddress.FirstAddress.ColumnNumber + 1, c.Style.Border.TopBorderColor)); + wsContainer.CellsUsed().Style.Border.SetOutsideBorderColor(value); + wsContainer.UpdatingStyle = true; + wsContainer.Style.Border.SetTopBorderColor(value); + wsContainer.Style.Border.SetBottomBorderColor(value); + wsContainer.Style.Border.SetLeftBorderColor(value); + wsContainer.Style.Border.SetRightBorderColor(value); + wsContainer.UpdatingStyle = false; + } + else + { + 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 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 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)); + 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; + 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); + 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); + } } } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index bdf157d..99aa5af 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -667,9 +667,9 @@ var newStrings = new Dictionary(); var newRichStrings = new Dictionary(); - foreach (XLCell c in Worksheets.Cast().SelectMany(w => w.Internals.CellsCollection.GetCells().Where(c => ((c.DataType == XLCellValues.Text && c.ShareString) || c.HasRichText) + foreach (XLCell c in Worksheets.Cast().SelectMany(w => w.Internals.CellsCollection.GetCells(c => ((c.DataType == XLCellValues.Text && c.ShareString) || c.HasRichText) - && c.InnerText.Length > 0 + && (c as XLCell).InnerText.Length > 0 && StringExtensions.IsNullOrWhiteSpace(c.FormulaA1) ))) { diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs index 17e8163..9e6f0f4 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs @@ -126,7 +126,10 @@ public override IXLStyle Style { - get { return GetStyle(); } + get + { + return GetStyle(); + } set { SetStyle(value);