diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs index b7fdf51..54a86b7 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs @@ -218,12 +218,22 @@ } } - return Worksheet.Columns(columnNum + 1, columnNum + numberOfColumns); + var newColumns = Worksheet.Columns(columnNum + 1, columnNum + numberOfColumns); + CopyColumns(newColumns); + return newColumns; } public new IXLColumns InsertColumnsBefore(Int32 numberOfColumns) { int columnNum = ColumnNumber(); + if (columnNum > 1) + { + using (var column = Worksheet.Column(columnNum - 1)) + { + return column.InsertColumnsAfter(numberOfColumns); + } + } + Worksheet.Internals.ColumnsCollection.ShiftColumnsRight(columnNum, numberOfColumns); using (var column = Worksheet.Column(columnNum)) @@ -237,6 +247,19 @@ return Worksheet.Columns(columnNum, columnNum + numberOfColumns - 1); } + private void CopyColumns(IXLColumns newColumns) + { + foreach (var newColumn in newColumns) + { + var internalColumn = Worksheet.Internals.ColumnsCollection[newColumn.ColumnNumber()]; + internalColumn._width = Width; + internalColumn.SetStyle(Style); + internalColumn._collapsed = Collapsed; + internalColumn._isHidden = IsHidden; + internalColumn._outlineLevel = OutlineLevel; + } + } + public IXLColumn AdjustToContents() { return AdjustToContents(1); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumnCollection.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumnCollection.cs index 2b8f285..8f518db 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumnCollection.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumnCollection.cs @@ -11,10 +11,20 @@ foreach (var ro in _dictionary.Keys.Where(k => k >= startingColumn).OrderByDescending(k => k)) { var columnToMove = _dictionary[ro]; - Int32 newColumn = ro + columnsToShift; - if (newColumn <= ExcelHelper.MaxColumnNumber) + Int32 newColumnNum = ro + columnsToShift; + if (newColumnNum <= ExcelHelper.MaxColumnNumber) { - _dictionary.Add(newColumn, new XLColumn(columnToMove)); + var newColumn = new XLColumn(columnToMove) + { + RangeAddress = + { + FirstAddress = new XLAddress(1, newColumnNum, false, false), + LastAddress = + new XLAddress(ExcelHelper.MaxRowNumber, newColumnNum, false, false) + } + }; + + _dictionary.Add(newColumnNum, newColumn); } _dictionary.Remove(ro); } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/IXLHFItem.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/IXLHFItem.cs index d743b8f..2710292 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/IXLHFItem.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/IXLHFItem.cs @@ -22,7 +22,7 @@ /// /// Adds the given predefined text to this header/footer item. /// - /// The predefined text to add to this header/footer item. + /// The predefined text to add to this header/footer item. IXLRichString AddText(XLHFPredefinedText predefinedText); /// @@ -35,12 +35,14 @@ /// /// Adds the given predefined text to this header/footer item. /// - /// The predefined text to add to this header/footer item. + /// The predefined text to add to this header/footer item. /// The occurrence for the predefined text. IXLRichString AddText(XLHFPredefinedText predefinedText, XLHFOccurrence occurrence); /// Clears the text/formats of this header/footer item. /// The occurrence to clear. void Clear(XLHFOccurrence occurrence = XLHFOccurrence.AllPages); + + IXLRichString AddImage(String imagePath, XLHFOccurrence occurrence = XLHFOccurrence.AllPages); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLHFItem.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLHFItem.cs index 67075e0..7801d2b 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLHFItem.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLHFItem.cs @@ -6,13 +6,17 @@ { internal class XLHFItem : IXLHFItem { - public XLHFItem() - { } - public XLHFItem(XLHFItem defaultHFItem) + private readonly XLWorksheet _worksheet; + public XLHFItem(XLWorksheet worksheet) + { + _worksheet = worksheet; + } + public XLHFItem(XLHFItem defaultHFItem, XLWorksheet worksheet) + :this(worksheet) { defaultHFItem.texts.ForEach(kp => texts.Add(kp.Key, kp.Value)); } - private Dictionary> texts = new Dictionary>(); + private readonly Dictionary> texts = new Dictionary>(); public String GetText(XLHFOccurrence occurrence) { var sb = new StringBuilder(); @@ -36,9 +40,9 @@ public IXLRichString AddText(String text, XLHFOccurrence occurrence) { - IXLRichString richText = new XLRichString(text, XLWorkbook.DefaultStyle.Font, this); + XLRichString richText = new XLRichString(text, XLWorkbook.DefaultStyle.Font, this); - var hfText = new XLHFText(richText); + var hfText = new XLHFText(richText, _worksheet); if (occurrence == XLHFOccurrence.AllPages) { AddTextToOccurrence(hfText, XLHFOccurrence.EvenPages); @@ -58,12 +62,17 @@ return AddText(Environment.NewLine); } + public IXLRichString AddImage(String imagePath, XLHFOccurrence occurrence = XLHFOccurrence.AllPages) + { + throw new NotImplementedException(); + } + private void AddTextToOccurrence(XLHFText hfText, XLHFOccurrence occurrence) { if (texts.ContainsKey(occurrence)) texts[occurrence].Add(hfText); else - texts.Add(occurrence, new List() { hfText }); + texts.Add(occurrence, new List { hfText }); } public IXLRichString AddText(XLHFPredefinedText predefinedText, XLHFOccurrence occurrence) @@ -103,53 +112,5 @@ if (texts.ContainsKey(occurrence)) texts.Remove(occurrence); } - - private String GetHFFont(String text, IXLFont xlFont) - { - String retVal = String.Empty; - - retVal += xlFont.FontName != null ? "&\"" + xlFont.FontName : "\"-"; - retVal += GetHFFontBoldItalic(xlFont); - retVal += xlFont.FontSize > 0 ? "&" + xlFont.FontSize.ToString() : ""; - retVal += xlFont.Strikethrough ? "&S" : ""; - retVal += xlFont.VerticalAlignment == XLFontVerticalTextAlignmentValues.Subscript ? "&Y" : ""; - retVal += xlFont.VerticalAlignment == XLFontVerticalTextAlignmentValues.Superscript ? "&X" : ""; - retVal += xlFont.Underline== XLFontUnderlineValues.Single ? "&U" : ""; - retVal += xlFont.Underline == XLFontUnderlineValues.Double ? "&E" : ""; - retVal += "&K" + xlFont.FontColor.Color.ToHex().Substring(2); - - retVal += text; - - retVal += xlFont.Underline == XLFontUnderlineValues.Double ? "&E" : ""; - retVal += xlFont.Underline == XLFontUnderlineValues.Single ? "&U" : ""; - retVal += xlFont.VerticalAlignment == XLFontVerticalTextAlignmentValues.Superscript ? "&X" : ""; - retVal += xlFont.VerticalAlignment == XLFontVerticalTextAlignmentValues.Subscript ? "&Y" : ""; - retVal += xlFont.Strikethrough ? "&S" : ""; - - return retVal; - } - - private String GetHFFontBoldItalic(IXLFont xlFont) - { - String retVal = String.Empty; - if (xlFont.Bold && xlFont.Italic) - { - retVal += ",Bold Italic\""; - } - else if (xlFont.Bold) - { - retVal += ",Bold\""; - } - else if (xlFont.Italic) - { - retVal += ",Italic\""; - } - else - { - retVal += ",Regular\""; - } - - return retVal; - } } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLHFText.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLHFText.cs index 90ff3c7..290fc27 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLHFText.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLHFText.cs @@ -1,64 +1,88 @@ using System; +using System.Text; namespace ClosedXML.Excel { internal class XLHFText { - public XLHFText(IXLRichString richText) + private readonly XLWorksheet _worksheet; + public XLHFText(XLRichString richText, XLWorksheet worksheet) { RichText = richText; + _worksheet = worksheet; } - public IXLRichString RichText { get; private set; } + public XLRichString RichText { get; private set; } public String HFText { get { - String retVal = String.Empty; + StringBuilder sb = new StringBuilder(); + var wsFont = _worksheet.Style.Font; + + if (RichText.FontName != null && RichText.FontName != wsFont.FontName) + sb.Append("&\"" + RichText.FontName); + else + sb.Append("&\"-"); - retVal += RichText.FontName != null ? "&\"" + RichText.FontName : "\"-"; - retVal += GetHFFontBoldItalic(RichText); - retVal += RichText.FontSize > 0 ? "&" + RichText.FontSize.ToString() : ""; - retVal += RichText.Strikethrough ? "&S" : ""; - retVal += RichText.VerticalAlignment == XLFontVerticalTextAlignmentValues.Subscript ? "&Y" : ""; - retVal += RichText.VerticalAlignment == XLFontVerticalTextAlignmentValues.Superscript ? "&X" : ""; - retVal += RichText.Underline == XLFontUnderlineValues.Single ? "&U" : ""; - retVal += RichText.Underline == XLFontUnderlineValues.Double ? "&E" : ""; - retVal += "&K" + RichText.FontColor.Color.ToHex().Substring(2); + if (RichText.Bold && RichText.Italic) + sb.Append(",Bold Italic\""); + else if (RichText.Bold) + sb.Append(",Bold\""); + else if (RichText.Italic) + sb.Append(",Italic\""); + else + sb.Append(",Regular\""); + + if (RichText.FontSize > 0 && Math.Abs(RichText.FontSize - wsFont.FontSize) > ExcelHelper.Epsilon) + sb.Append("&" + RichText.FontSize); - retVal += RichText.Text; + if (RichText.Strikethrough && !wsFont.Strikethrough) + sb.Append("&S"); - retVal += RichText.Underline == XLFontUnderlineValues.Double ? "&E" : ""; - retVal += RichText.Underline == XLFontUnderlineValues.Single ? "&U" : ""; - retVal += RichText.VerticalAlignment == XLFontVerticalTextAlignmentValues.Superscript ? "&X" : ""; - retVal += RichText.VerticalAlignment == XLFontVerticalTextAlignmentValues.Subscript ? "&Y" : ""; - retVal += RichText.Strikethrough ? "&S" : ""; + if (RichText.VerticalAlignment != wsFont.VerticalAlignment) + { + if (RichText.VerticalAlignment == XLFontVerticalTextAlignmentValues.Subscript) + sb.Append("&Y"); + else if (RichText.VerticalAlignment == XLFontVerticalTextAlignmentValues.Superscript) + sb.Append("&X"); + } - return retVal; + if(RichText.Underline != wsFont.Underline) + { + if (RichText.Underline == XLFontUnderlineValues.Single) + sb.Append("&U"); + else if (RichText.Underline == XLFontUnderlineValues.Double) + sb.Append("&E"); + } + + if(!RichText.FontColor.Equals(wsFont.FontColor)) + sb.Append("&K" + RichText.FontColor.Color.ToHex().Substring(2)); + + sb.Append(RichText.Text); + + if(RichText.Underline != wsFont.Underline) + { + if (RichText.Underline == XLFontUnderlineValues.Single) + sb.Append("&U"); + else if (RichText.Underline == XLFontUnderlineValues.Double) + sb.Append("&E"); + } + + if (RichText.VerticalAlignment != wsFont.VerticalAlignment) + { + if (RichText.VerticalAlignment == XLFontVerticalTextAlignmentValues.Subscript) + sb.Append("&Y"); + else if (RichText.VerticalAlignment == XLFontVerticalTextAlignmentValues.Superscript) + sb.Append("&X"); + } + + if (RichText.Strikethrough && !wsFont.Strikethrough) + sb.Append("&S"); + + return sb.ToString(); } } - - private String GetHFFontBoldItalic(IXLRichString xlFont) - { - String retVal = String.Empty; - if (xlFont.Bold && xlFont.Italic) - { - retVal += ",Bold Italic\""; - } - else if (xlFont.Bold) - { - retVal += ",Bold\""; - } - else if (xlFont.Italic) - { - retVal += ",Italic\""; - } - else - { - retVal += ",Regular\""; - } - - return retVal; - } + } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLHeaderFooter.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLHeaderFooter.cs index 4e99e3b..ec3e639 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLHeaderFooter.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLHeaderFooter.cs @@ -7,20 +7,20 @@ internal class XLHeaderFooter: IXLHeaderFooter { - public XLHeaderFooter() + public XLHeaderFooter(XLWorksheet worksheet) { - Left = new XLHFItem(); - Right = new XLHFItem(); - Center = new XLHFItem(); + Left = new XLHFItem(worksheet); + Right = new XLHFItem(worksheet); + Center = new XLHFItem(worksheet); SetAsInitial(); } - public XLHeaderFooter(XLHeaderFooter defaultHF) + public XLHeaderFooter(XLHeaderFooter defaultHF, XLWorksheet worksheet) { defaultHF.innerTexts.ForEach(kp => innerTexts.Add(kp.Key, kp.Value)); - Left = new XLHFItem(defaultHF.Left as XLHFItem); - Center = new XLHFItem(defaultHF.Center as XLHFItem); - Right = new XLHFItem(defaultHF.Right as XLHFItem); + Left = new XLHFItem(defaultHF.Left as XLHFItem, worksheet); + Center = new XLHFItem(defaultHF.Center as XLHFItem, worksheet); + Right = new XLHFItem(defaultHF.Right as XLHFItem, worksheet); SetAsInitial(); } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLPageSetup.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLPageSetup.cs index a125d51..1e98906 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLPageSetup.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/PageSetup/XLPageSetup.cs @@ -46,15 +46,15 @@ ColumnBreaks = defaultPageOptions.ColumnBreaks.ToList(); RowBreaks = defaultPageOptions.RowBreaks.ToList(); - Header = new XLHeaderFooter(defaultPageOptions.Header as XLHeaderFooter); - Footer = new XLHeaderFooter(defaultPageOptions.Footer as XLHeaderFooter); + Header = new XLHeaderFooter(defaultPageOptions.Header as XLHeaderFooter, worksheet); + Footer = new XLHeaderFooter(defaultPageOptions.Footer as XLHeaderFooter, worksheet); PrintErrorValue = defaultPageOptions.PrintErrorValue; } else { PrintAreas = new XLPrintAreas(worksheet); - Header = new XLHeaderFooter(); - Footer = new XLHeaderFooter(); + Header = new XLHeaderFooter(worksheet); + Footer = new XLHeaderFooter(worksheet); ColumnBreaks = new List(); RowBreaks = new List(); } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs index 57bf511..1132fc3 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs @@ -522,7 +522,23 @@ RangeAddress.LastAddress.ColumnNumber, includeFormats, predicate); - return sp.Row == 0 ? null : Worksheet.Cell(sp.Row, sp.Column); + if(sp.Row > 0) + return Worksheet.Cell(sp.Row, sp.Column); + + //if (includeFormats) + //{ + // using (var rowsUsed = Worksheet.Rows(1, 1)) + // { + // foreach (var row in rowsUsed) + // { + // if(!row.IsEmpty(true)) + // return Worksheet.Cell() + // } + // } + //} + + + return null; } public XLCell LastCellUsed() @@ -1101,18 +1117,23 @@ if (formatFromAbove && rangeToReturn.RangeAddress.FirstAddress.RowNumber > 1) { - var model = rangeToReturn.FirstRow().RowAbove(); - var modelFirstColumn = model.FirstCellUsed(true); - var modelLastColumn = model.LastCellUsed(true); - if (modelLastColumn != null) + using (var fr = rangeToReturn.FirstRow()) { - Int32 firstCoReturned = modelFirstColumn.Address.ColumnNumber - - model.RangeAddress.FirstAddress.ColumnNumber + 1; - Int32 lastCoReturned = modelLastColumn.Address.ColumnNumber - - model.RangeAddress.FirstAddress.ColumnNumber + 1; - for (Int32 co = firstCoReturned; co <= lastCoReturned; co++) + using (var model = fr.RowAbove()) { - rangeToReturn.Column(co).Style = model.Cell(co).Style; + var modelFirstColumn = model.FirstCellUsed(true); + var modelLastColumn = model.LastCellUsed(true); + if (modelLastColumn != null) + { + Int32 firstCoReturned = modelFirstColumn.Address.ColumnNumber + - model.RangeAddress.FirstAddress.ColumnNumber + 1; + Int32 lastCoReturned = modelLastColumn.Address.ColumnNumber + - model.RangeAddress.FirstAddress.ColumnNumber + 1; + for (Int32 co = firstCoReturned; co <= lastCoReturned; co++) + { + rangeToReturn.Column(co).Style = model.Cell(co).Style; + } + } } } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs index d99c879..5ff43df 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs @@ -143,12 +143,37 @@ asRange.InsertRowsBelow(true, numberOfRows).Dispose(); } } - return Worksheet.Rows(rowNum + 1, rowNum + numberOfRows); + var newRows = Worksheet.Rows(rowNum + 1, rowNum + numberOfRows); + + CopyRows(newRows); + + return newRows; + } + + private void CopyRows(IXLRows newRows) + { + foreach (var newRow in newRows) + { + var internalRow = Worksheet.Internals.RowsCollection[newRow.RowNumber()]; + internalRow._height = Height; + internalRow.SetStyle(Style); + internalRow._collapsed = Collapsed; + internalRow._isHidden = IsHidden; + internalRow._outlineLevel = OutlineLevel; + } } public new IXLRows InsertRowsAbove(Int32 numberOfRows) { int rowNum = RowNumber(); + if (rowNum > 1) + { + using (var row = Worksheet.Row(rowNum - 1)) + { + return row.InsertRowsBelow(numberOfRows); + } + } + Worksheet.Internals.RowsCollection.ShiftRowsDown(rowNum, numberOfRows); using (var row = Worksheet.Row(rowNum)) { @@ -328,7 +353,10 @@ public override IXLStyle Style { - get { return IsReference ? Worksheet.Internals.RowsCollection[RowNumber()].Style : GetStyle(); } + get + { + return IsReference ? Worksheet.Internals.RowsCollection[RowNumber()].Style : GetStyle(); + } set { if (IsReference) @@ -477,7 +505,6 @@ var newRow = (XLRow)row; newRow._height = _height; - //newRow._style = new XLStyle(newRow, Style); newRow.Style = GetStyle(); return newRow; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRowCollection.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRowCollection.cs index f50657d..b6ce3eb 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRowCollection.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRowCollection.cs @@ -123,9 +123,20 @@ foreach (int ro in _dictionary.Keys.Where(k => k >= startingRow).OrderByDescending(k => k)) { var rowToMove = _dictionary[ro]; - Int32 newRow = ro + rowsToShift; - if (newRow <= ExcelHelper.MaxRowNumber) - _dictionary.Add(newRow, new XLRow(rowToMove)); + Int32 newRowNum = ro + rowsToShift; + if (newRowNum <= ExcelHelper.MaxRowNumber) + { + var newRow = new XLRow(rowToMove) + { + RangeAddress = + { + FirstAddress = new XLAddress(newRowNum, 1, false, false), + LastAddress = + new XLAddress(newRowNum, ExcelHelper.MaxColumnNumber, false, false) + } + }; + _dictionary.Add(newRowNum, newRow); + } _dictionary.Remove(ro); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Internal.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Internal.cs index 3e77109..aaa04fb 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Internal.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Internal.cs @@ -9,56 +9,56 @@ internal XLColor(IXLColor defaultColor) { XLColor dColor = (XLColor)defaultColor; - if (dColor.colorType == XLColorType.Color) + if (dColor._colorType == XLColorType.Color) color = dColor.color; - else if (dColor.colorType == XLColorType.Theme) + else if (dColor._colorType == XLColorType.Theme) { - themeColor = dColor.themeColor; - themeTint = dColor.themeTint; + _themeColor = dColor._themeColor; + _themeTint = dColor._themeTint; } else { - indexed = dColor.indexed; + _indexed = dColor._indexed; } HasValue = true; - hashCode = dColor.hashCode; - colorType = dColor.colorType; + _hashCode = dColor._hashCode; + _colorType = dColor._colorType; } internal XLColor() { HasValue = false; - hashCode = 0; + _hashCode = 0; } internal XLColor(Color color) { this.color = color; - hashCode = 13 ^ color.ToArgb(); + _hashCode = 13 ^ color.ToArgb(); HasValue = true; - colorType = XLColorType.Color; + _colorType = XLColorType.Color; } internal XLColor(Int32 index) { - this.indexed = index; - hashCode = 11 ^ indexed; + this._indexed = index; + _hashCode = 11 ^ _indexed; HasValue = true; - colorType = XLColorType.Indexed; + _colorType = XLColorType.Indexed; } internal XLColor(XLThemeColor themeColor) { - this.themeColor = themeColor; - this.themeTint = 1; - hashCode = 7 ^ this.themeColor.GetHashCode() ^ themeTint.GetHashCode(); + this._themeColor = themeColor; + this._themeTint = 1; + _hashCode = 7 ^ this._themeColor.GetHashCode() ^ _themeTint.GetHashCode(); HasValue = true; - colorType = XLColorType.Theme; + _colorType = XLColorType.Theme; } internal XLColor(XLThemeColor themeColor, Double themeTint) { - this.themeColor = themeColor; - this.themeTint = themeTint; - hashCode = 7 ^ this.themeColor.GetHashCode() ^ this.themeTint.GetHashCode(); + this._themeColor = themeColor; + this._themeTint = themeTint; + _hashCode = 7 ^ this._themeColor.GetHashCode() ^ this._themeTint.GetHashCode(); HasValue = true; - colorType = XLColorType.Theme; + _colorType = XLColorType.Theme; } } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Public.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Public.cs index 8a62eea..b578bba 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Public.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Public.cs @@ -7,15 +7,11 @@ { public Boolean HasValue { get; private set; } - XLColorType colorType; + private readonly XLColorType _colorType; public XLColorType ColorType { get { - return colorType; - } - private set - { - colorType = value; + return _colorType; } } private Color color; @@ -23,139 +19,90 @@ { get { - if (colorType == XLColorType.Theme) - { - //if (workbook == null) - throw new Exception("Cannot convert theme color to Color."); - //else - // return workbook.GetXLColor(themeColor).Color; - } - else if (colorType == XLColorType.Indexed) - { - return IndexedColors[indexed].Color; - } - else - { - return color; - } - } - private set - { - color = value; - colorType = XLColorType.Color; + if (_colorType == XLColorType.Theme) + throw new Exception("Cannot convert theme color to Color."); + + if (_colorType == XLColorType.Indexed) + return IndexedColors[_indexed].Color; + + return color; } } - private Int32 indexed; + private readonly Int32 _indexed; public Int32 Indexed { get { if (ColorType == XLColorType.Theme) - { throw new Exception("Cannot convert theme color to indexed color."); - } - else if (ColorType == XLColorType.Indexed) - { - return indexed; - } - else // ColorType == Color - { - throw new Exception("Cannot convert Color to indexed color."); - } - } - private set - { - indexed = value; - colorType = XLColorType.Indexed; + + if (ColorType == XLColorType.Indexed) + return _indexed; + + throw new Exception("Cannot convert Color to indexed color."); } } - private XLThemeColor themeColor; + private readonly XLThemeColor _themeColor; public XLThemeColor ThemeColor { get { if (ColorType == XLColorType.Theme) - { - return themeColor; - } - else if (ColorType == XLColorType.Indexed) - { + return _themeColor; + + if (ColorType == XLColorType.Indexed) throw new Exception("Cannot convert indexed color to theme color."); - } - else // ColorType == Color - { - throw new Exception("Cannot convert Color to theme color."); - } + + throw new Exception("Cannot convert Color to theme color."); } - private set - { - themeColor = value; - if (themeTint == 0) - themeTint = 1; - colorType = XLColorType.Theme; - } + } - private Double themeTint; + private readonly Double _themeTint; public Double ThemeTint { get { if (ColorType == XLColorType.Theme) - { - return themeTint; - } - else if (ColorType == XLColorType.Indexed) - { + return _themeTint; + + if (ColorType == XLColorType.Indexed) throw new Exception("Cannot extract theme tint from an indexed color."); - } - else // ColorType == Color - { - return (Double)color.A / 255.0; - } - } - private set - { - themeTint = value; - colorType = XLColorType.Theme; + + return color.A / 255.0; } } public bool Equals(IXLColor other) { var otherC = other as XLColor; - if (colorType == otherC.colorType) + if (_colorType == otherC._colorType) { - if (colorType == XLColorType.Color) + if (_colorType == XLColorType.Color) { return color.ToArgb() == otherC.color.ToArgb(); } - if (colorType == XLColorType.Theme) + if (_colorType == XLColorType.Theme) { - return themeColor == otherC.themeColor - && themeTint == otherC.themeTint; + return _themeColor == otherC._themeColor + && Math.Abs(_themeTint - otherC._themeTint) < ExcelHelper.Epsilon; } - else - { - return indexed == otherC.indexed; - } + return _indexed == otherC._indexed; } - else - { - return false; - } + + return false; } public override bool Equals(object obj) { - return this.Equals((XLColor)obj); + return Equals((XLColor)obj); } - int hashCode; + private readonly int _hashCode; public override int GetHashCode() { - return hashCode; + return _hashCode; } } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Properties/AssemblyInfo.cs b/ClosedXML/ClosedXML/ClosedXML/Properties/AssemblyInfo.cs index e2a3f20..dd8a225 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Properties/AssemblyInfo.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Properties/AssemblyInfo.cs @@ -31,6 +31,6 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.60.0.0")] -[assembly: AssemblyFileVersion("0.60.0.0")] +[assembly: AssemblyVersion("0.62.1.0")] +[assembly: AssemblyFileVersion("0.62.1.0")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("ClosedXML_Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100a1fb8ba59167fe734d64128ca73d32c45cb8a117246d09c95c8769db88fe332b0a3396bedd0ea48ee42b0e5796fec0798ca5cb628a9a6de80d35d6c67b936ca1670347b3d4f2b769c8ce2ddcf959dbac6bcd88e6c08751ea1fffa0522de3507193e7035305a8aa008d6c88cca1341b3120fa9c347ab3f97e2d772e2709277da5")] \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Creating/CreateFiles.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Creating/CreateFiles.cs index c39608a..a213c58 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Creating/CreateFiles.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Creating/CreateFiles.cs @@ -11,77 +11,77 @@ { public static void CreateAllFiles() { - new HelloWorld().Create(@"C:\Excel Files\Created\HelloWorld.xlsx"); - new BasicTable().Create(@"C:\Excel Files\Created\BasicTable.xlsx"); + //new HelloWorld().Create(@"C:\Excel Files\Created\HelloWorld.xlsx"); + //new BasicTable().Create(@"C:\Excel Files\Created\BasicTable.xlsx"); - new StyleExamples().Create(); - new ChangingBasicTable().Create(@"C:\Excel Files\Created\BasicTable_Modified.xlsx"); - new ShiftingRanges().Create(@"C:\Excel Files\Created\ShiftingRanges.xlsx"); - new ColumnSettings().Create(@"C:\Excel Files\Created\ColumnSettings.xlsx"); - new RowSettings().Create(@"C:\Excel Files\Created\RowSettings.xlsx"); - new MergeCells().Create(@"C:\Excel Files\Created\MergedCells.xlsx"); + //new StyleExamples().Create(); + //new ChangingBasicTable().Create(@"C:\Excel Files\Created\BasicTable_Modified.xlsx"); + //new ShiftingRanges().Create(@"C:\Excel Files\Created\ShiftingRanges.xlsx"); + //new ColumnSettings().Create(@"C:\Excel Files\Created\ColumnSettings.xlsx"); + //new RowSettings().Create(@"C:\Excel Files\Created\RowSettings.xlsx"); + //new MergeCells().Create(@"C:\Excel Files\Created\MergedCells.xlsx"); new InsertRows().Create(@"C:\Excel Files\Created\InsertRows.xlsx"); - new InsertColumns().Create(@"C:\Excel Files\Created\InsertColumns.xlsx"); - new ColumnCollection().Create(@"C:\Excel Files\Created\ColumnCollection.xlsx"); - new DataTypes().Create(@"C:\Excel Files\Created\DataTypes.xlsx"); - new MultipleSheets().Create(@"C:\Excel Files\Created\MultipleSheets.xlsx"); - new RowCollection().Create(@"C:\Excel Files\Created\RowCollection.xlsx"); - new DefiningRanges().Create(@"C:\Excel Files\Created\DefiningRanges.xlsx"); - new ClearingRanges().Create(@"C:\Excel Files\Created\ClearingRanges.xlsx"); - new DeletingRanges().Create(@"C:\Excel Files\Created\DeletingRanges.xlsx"); - new Margins().Create(@"C:\Excel Files\Created\Margins.xlsx"); - new Page().Create(@"C:\Excel Files\Created\Page.xlsx"); + //new InsertColumns().Create(@"C:\Excel Files\Created\InsertColumns.xlsx"); + //new ColumnCollection().Create(@"C:\Excel Files\Created\ColumnCollection.xlsx"); + //new DataTypes().Create(@"C:\Excel Files\Created\DataTypes.xlsx"); + //new MultipleSheets().Create(@"C:\Excel Files\Created\MultipleSheets.xlsx"); + //new RowCollection().Create(@"C:\Excel Files\Created\RowCollection.xlsx"); + //new DefiningRanges().Create(@"C:\Excel Files\Created\DefiningRanges.xlsx"); + //new ClearingRanges().Create(@"C:\Excel Files\Created\ClearingRanges.xlsx"); + //new DeletingRanges().Create(@"C:\Excel Files\Created\DeletingRanges.xlsx"); + //new Margins().Create(@"C:\Excel Files\Created\Margins.xlsx"); + //new Page().Create(@"C:\Excel Files\Created\Page.xlsx"); new HeaderFooters().Create(@"C:\Excel Files\Created\HeaderFooters.xlsx"); - new Sheets().Create(@"C:\Excel Files\Created\Sheets.xlsx"); - new SheetTab().Create(@"C:\Excel Files\Created\SheetTab.xlsx"); - new MultipleRanges().Create(@"C:\Excel Files\Created\MultipleRanges.xlsx"); - new StyleWorksheet().Create(@"C:\Excel Files\Created\StyleWorksheet.xlsx"); - new StyleRowsColumns().Create(@"C:\Excel Files\Created\StyleRowsColumns.xlsx"); - new InsertingDeletingRows().Create(@"C:\Excel Files\Created\InsertingDeletingRows.xlsx"); - new InsertingDeletingColumns().Create(@"C:\Excel Files\Created\InsertingDeletingColumns.xlsx"); - new DeletingColumns().Create(@"C:\Excel Files\Created\DeletingColumns.xlsx"); - new CellValues().Create(@"C:\Excel Files\Created\CellValues.xlsx"); - new LambdaExpressions().Create(@"C:\Excel Files\Created\LambdaExpressions.xlsx"); - new DefaultStyles().Create(@"C:\Excel Files\Created\DefaultStyles.xlsx"); - new TransposeRanges().Create(@"C:\Excel Files\Created\TransposeRanges.xlsx"); - new TransposeRangesPlus().Create(@"C:\Excel Files\Created\TransposeRangesPlus.xlsx"); - new MergeMoves().Create(@"C:\Excel Files\Created\MergedMoves.xlsx"); - new WorkbookProperties().Create(@"C:\Excel Files\Created\WorkbookProperties.xlsx"); - new AdjustToContents().Create(@"C:\Excel Files\Created\AdjustToContents.xlsx"); - new HideUnhide().Create(@"C:\Excel Files\Created\HideUnhide.xlsx"); - new Outline().Create(@"C:\Excel Files\Created\Outline.xlsx"); - new Formulas().Create(@"C:\Excel Files\Created\Formulas.xlsx"); - new Collections().Create(@"C:\Excel Files\Created\Collections.xlsx"); - new NamedRanges().Create(@"C:\Excel Files\Created\NamedRanges.xlsx"); - new CopyingRanges().Create(@"C:\Excel Files\Created\CopyingRanges.xlsx"); - new BlankCells().Create(@"C:\Excel Files\Created\BlankCells.xlsx"); - new TwoPages().Create(@"C:\Excel Files\Created\TwoPages.xlsx"); - new UsingColors().Create(@"C:\Excel Files\Created\UsingColors.xlsx"); + //new Sheets().Create(@"C:\Excel Files\Created\Sheets.xlsx"); + //new SheetTab().Create(@"C:\Excel Files\Created\SheetTab.xlsx"); + //new MultipleRanges().Create(@"C:\Excel Files\Created\MultipleRanges.xlsx"); + //new StyleWorksheet().Create(@"C:\Excel Files\Created\StyleWorksheet.xlsx"); + //new StyleRowsColumns().Create(@"C:\Excel Files\Created\StyleRowsColumns.xlsx"); + //new InsertingDeletingRows().Create(@"C:\Excel Files\Created\InsertingDeletingRows.xlsx"); + //new InsertingDeletingColumns().Create(@"C:\Excel Files\Created\InsertingDeletingColumns.xlsx"); + //new DeletingColumns().Create(@"C:\Excel Files\Created\DeletingColumns.xlsx"); + //new CellValues().Create(@"C:\Excel Files\Created\CellValues.xlsx"); + //new LambdaExpressions().Create(@"C:\Excel Files\Created\LambdaExpressions.xlsx"); + //new DefaultStyles().Create(@"C:\Excel Files\Created\DefaultStyles.xlsx"); + //new TransposeRanges().Create(@"C:\Excel Files\Created\TransposeRanges.xlsx"); + //new TransposeRangesPlus().Create(@"C:\Excel Files\Created\TransposeRangesPlus.xlsx"); + //new MergeMoves().Create(@"C:\Excel Files\Created\MergedMoves.xlsx"); + //new WorkbookProperties().Create(@"C:\Excel Files\Created\WorkbookProperties.xlsx"); + //new AdjustToContents().Create(@"C:\Excel Files\Created\AdjustToContents.xlsx"); + //new HideUnhide().Create(@"C:\Excel Files\Created\HideUnhide.xlsx"); + //new Outline().Create(@"C:\Excel Files\Created\Outline.xlsx"); + //new Formulas().Create(@"C:\Excel Files\Created\Formulas.xlsx"); + //new Collections().Create(@"C:\Excel Files\Created\Collections.xlsx"); + //new NamedRanges().Create(@"C:\Excel Files\Created\NamedRanges.xlsx"); + //new CopyingRanges().Create(@"C:\Excel Files\Created\CopyingRanges.xlsx"); + //new BlankCells().Create(@"C:\Excel Files\Created\BlankCells.xlsx"); + //new TwoPages().Create(@"C:\Excel Files\Created\TwoPages.xlsx"); + //new UsingColors().Create(@"C:\Excel Files\Created\UsingColors.xlsx"); - new ColumnCells().Create(@"C:\Excel Files\Created\ColumnCells.xlsx"); - new RowCells().Create(@"C:\Excel Files\Created\RowCells.xlsx"); - new FreezePanes().Create(@"C:\Excel Files\Created\FreezePanes.xlsx"); - new UsingTables().Create(@"C:\Excel Files\Created\UsingTables.xlsx"); - new ShowCase().Create(@"C:\Excel Files\Created\ShowCase.xlsx"); - new CopyingWorksheets().Create(@"C:\Excel Files\Created\CopyingWorksheets.xlsx"); - new InsertingTables().Create(@"C:\Excel Files\Created\InsertingTables.xlsx"); - new InsertingData().Create(@"C:\Excel Files\Created\InsertingData.xlsx"); - new Hyperlinks().Create(@"C:\Excel Files\Created\Hyperlinks.xlsx"); - new DataValidation().Create(@"C:\Excel Files\Created\DataValidation.xlsx"); - new HideSheets().Create(@"C:\Excel Files\Created\HideSheets.xlsx"); - new SheetProtection().Create(@"C:\Excel Files\Created\SheetProtection.xlsx"); - new AutoFilter().Create(@"C:\Excel Files\Created\AutoFilter.xlsx"); - new Sorting().Create(@"C:\Excel Files\Created\Sorting.xlsx"); - new SortExample().Create(@"C:\Excel Files\Created\SortExample.xlsx"); - new AddingDataSet().Create(@"C:\Excel Files\Created\AddingDataSet.xlsx"); - new AddingDataTableAsWorksheet().Create(@"C:\Excel Files\Created\AddingDataTableAsWorksheet.xlsx"); - new TabColors().Create(@"C:\Excel Files\Created\TabColors.xlsx"); - new ShiftingFormulas().Create(@"C:\Excel Files\Created\ShiftingFormulas.xlsx"); - new CopyingRowsAndColumns().Create(@"C:\Excel Files\Created\CopyingRowsAndColumns.xlsx"); - new UsingRichText().Create(@"C:\Excel Files\Created\UsingRichText.xlsx"); - new UsingPhonetics().Create(@"C:\Excel Files\Created\UsingPhonetics.xlsx"); - new WalkingRanges().Create(@"C:\Excel Files\Created\CellMoves.xlsx"); - new AddingComments().Create(@"C:\Excel Files\Created\AddingComments.xlsx"); + //new ColumnCells().Create(@"C:\Excel Files\Created\ColumnCells.xlsx"); + //new RowCells().Create(@"C:\Excel Files\Created\RowCells.xlsx"); + //new FreezePanes().Create(@"C:\Excel Files\Created\FreezePanes.xlsx"); + //new UsingTables().Create(@"C:\Excel Files\Created\UsingTables.xlsx"); + //new ShowCase().Create(@"C:\Excel Files\Created\ShowCase.xlsx"); + //new CopyingWorksheets().Create(@"C:\Excel Files\Created\CopyingWorksheets.xlsx"); + //new InsertingTables().Create(@"C:\Excel Files\Created\InsertingTables.xlsx"); + //new InsertingData().Create(@"C:\Excel Files\Created\InsertingData.xlsx"); + //new Hyperlinks().Create(@"C:\Excel Files\Created\Hyperlinks.xlsx"); + //new DataValidation().Create(@"C:\Excel Files\Created\DataValidation.xlsx"); + //new HideSheets().Create(@"C:\Excel Files\Created\HideSheets.xlsx"); + //new SheetProtection().Create(@"C:\Excel Files\Created\SheetProtection.xlsx"); + //new AutoFilter().Create(@"C:\Excel Files\Created\AutoFilter.xlsx"); + //new Sorting().Create(@"C:\Excel Files\Created\Sorting.xlsx"); + //new SortExample().Create(@"C:\Excel Files\Created\SortExample.xlsx"); + //new AddingDataSet().Create(@"C:\Excel Files\Created\AddingDataSet.xlsx"); + //new AddingDataTableAsWorksheet().Create(@"C:\Excel Files\Created\AddingDataTableAsWorksheet.xlsx"); + //new TabColors().Create(@"C:\Excel Files\Created\TabColors.xlsx"); + //new ShiftingFormulas().Create(@"C:\Excel Files\Created\ShiftingFormulas.xlsx"); + //new CopyingRowsAndColumns().Create(@"C:\Excel Files\Created\CopyingRowsAndColumns.xlsx"); + //new UsingRichText().Create(@"C:\Excel Files\Created\UsingRichText.xlsx"); + //new UsingPhonetics().Create(@"C:\Excel Files\Created\UsingPhonetics.xlsx"); + //new WalkingRanges().Create(@"C:\Excel Files\Created\CellMoves.xlsx"); + //new AddingComments().Create(@"C:\Excel Files\Created\AddingComments.xlsx"); } } } diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Program.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Program.cs index 16edb3c..5c4b960 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Program.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Program.cs @@ -6,7 +6,7 @@ static void Main(string[] args) { CreateFiles.CreateAllFiles(); - LoadFiles.LoadAllFiles(); + //LoadFiles.LoadAllFiles(); } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Rows/InsertRows.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Rows/InsertRows.cs index 8b46171..8885e51 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Rows/InsertRows.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Rows/InsertRows.cs @@ -66,9 +66,9 @@ ws.Columns(3, 4).Style.Fill.BackgroundColor = XLColor.Orange; ws.Range("A2:A4").InsertRowsBelow(2); - ws.Range("B2:B4").InsertRowsAbove(2); - ws.Range("C2:C4").InsertRowsBelow(2); - ws.Range("D2:D4").InsertRowsAbove(2); + //ws.Range("B2:B4").InsertRowsAbove(2); + //ws.Range("C2:C4").InsertRowsBelow(2); + //ws.Range("D2:D4").InsertRowsAbove(2); workbook.SaveAs(filePath); } diff --git a/ClosedXML/ClosedXML/ClosedXML_Net3.5/Properties/AssemblyInfo.cs b/ClosedXML/ClosedXML/ClosedXML_Net3.5/Properties/AssemblyInfo.cs index ff5d5bb..7834663 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Net3.5/Properties/AssemblyInfo.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Net3.5/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.60.0.0")] -[assembly: AssemblyFileVersion("0.60.0.0")] +[assembly: AssemblyVersion("0.62.1.0")] +[assembly: AssemblyFileVersion("0.62.1.0")] diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj index a8d5c26..8fe2609 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj @@ -81,6 +81,7 @@ + diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Ranges/InsertingRangesTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Ranges/InsertingRangesTests.cs new file mode 100644 index 0000000..b9a8263 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Ranges/InsertingRangesTests.cs @@ -0,0 +1,70 @@ +using ClosedXML.Excel; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Linq; +using System; +using System.IO; + +namespace ClosedXML_Tests +{ + [TestClass()] + public class InsertingRangesTests + { + [TestMethod] + public void InsertingRowsPreservesFormatting() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Sheet"); + var row1 = ws.Row(1); + row1.Style.Fill.SetBackgroundColor(XLColor.FrenchLilac); + row1.Cell(2).Style.Fill.SetBackgroundColor(XLColor.Fulvous); + var row2 = ws.Row(2); + row2.Style.Fill.SetBackgroundColor(XLColor.Xanadu); + row2.Cell(2).Style.Fill.SetBackgroundColor(XLColor.MacaroniAndCheese); + + row1.InsertRowsBelow(1); + row1.InsertRowsAbove(1); + row2.InsertRowsAbove(1); + + Assert.AreEqual(ws.Style.Fill.BackgroundColor, ws.Row(1).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.FrenchLilac, ws.Row(2).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.FrenchLilac, ws.Row(3).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.FrenchLilac, ws.Row(4).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.Xanadu, ws.Row(5).Style.Fill.BackgroundColor); + + Assert.AreEqual(ws.Style.Fill.BackgroundColor, ws.Cell(1, 2).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.Fulvous, ws.Cell(2, 2).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.Fulvous, ws.Cell(3, 2).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.Fulvous, ws.Cell(4, 2).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.MacaroniAndCheese, ws.Cell(5, 2).Style.Fill.BackgroundColor); + } + + [TestMethod] + public void InsertingColumnsPreservesFormatting() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Sheet"); + var column1 = ws.Column(1); + column1.Style.Fill.SetBackgroundColor(XLColor.FrenchLilac); + column1.Cell(2).Style.Fill.SetBackgroundColor(XLColor.Fulvous); + var column2 = ws.Column(2); + column2.Style.Fill.SetBackgroundColor(XLColor.Xanadu); + column2.Cell(2).Style.Fill.SetBackgroundColor(XLColor.MacaroniAndCheese); + + column1.InsertColumnsAfter(1); + column1.InsertColumnsBefore(1); + column2.InsertColumnsBefore(1); + + Assert.AreEqual(ws.Style.Fill.BackgroundColor, ws.Column(1).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.FrenchLilac, ws.Column(2).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.FrenchLilac, ws.Column(3).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.FrenchLilac, ws.Column(4).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.Xanadu, ws.Column(5).Style.Fill.BackgroundColor); + + Assert.AreEqual(ws.Style.Fill.BackgroundColor, ws.Cell(2, 1).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.Fulvous, ws.Cell(2, 2).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.Fulvous, ws.Cell(2, 3).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.Fulvous, ws.Cell(2, 4).Style.Fill.BackgroundColor); + Assert.AreEqual(XLColor.MacaroniAndCheese, ws.Cell(2, 5).Style.Fill.BackgroundColor); + } + } +}