diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs index 22225c5..0914108 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs @@ -304,13 +304,20 @@ public IXLRange Merge() { + return Merge(true); + } + + internal IXLRange Merge(Boolean checkIntersect) + { string tAddress = RangeAddress.ToString(); var mergedRanges = Worksheet.Internals.MergedRanges.ToList(); - foreach (var mergedRange in mergedRanges) - { - if (mergedRange.Intersects(tAddress)) - Worksheet.Internals.MergedRanges.Remove(mergedRange); - } + + if (checkIntersect) + foreach (var mergedRange in mergedRanges) + { + if (mergedRange.Intersects(tAddress)) + Worksheet.Internals.MergedRanges.Remove(mergedRange); + } var asRange = AsRange(); Worksheet.Internals.MergedRanges.Add(asRange); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Internal.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Internal.cs index 70c5fe2..a8bd7f3 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Internal.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Internal.cs @@ -5,60 +5,64 @@ { public partial class XLColor { - internal XLColor(XLColor defaultColor) { - XLColor dColor = (XLColor)defaultColor; + var dColor = defaultColor; if (dColor._colorType == XLColorType.Color) - color = dColor.color; + _color = dColor._color; else if (dColor._colorType == XLColorType.Theme) { _themeColor = dColor._themeColor; _themeTint = dColor._themeTint; } - else + else { _indexed = dColor._indexed; - } + } HasValue = true; _hashCode = dColor._hashCode; _colorType = dColor._colorType; } + internal XLColor() { HasValue = false; _hashCode = 0; } + internal XLColor(Color color) { - this.color = color; + _color = color; _hashCode = 13 ^ color.ToArgb(); HasValue = true; _colorType = XLColorType.Color; } + internal XLColor(Int32 index) { - this._indexed = index; + _indexed = index; _hashCode = 11 ^ _indexed; HasValue = true; _colorType = XLColorType.Indexed; } + internal XLColor(XLThemeColor themeColor) { - this._themeColor = themeColor; - this._themeTint = 1; - _hashCode = 7 ^ this._themeColor.GetHashCode() ^ _themeTint.GetHashCode(); + _themeColor = themeColor; + _themeTint = 1; + _hashCode = 7 ^ _themeColor.GetHashCode() ^ _themeTint.GetHashCode(); HasValue = true; _colorType = XLColorType.Theme; } + internal XLColor(XLThemeColor themeColor, Double themeTint) { - this._themeColor = themeColor; - this._themeTint = themeTint; - _hashCode = 7 ^ this._themeColor.GetHashCode() ^ this._themeTint.GetHashCode(); + _themeColor = themeColor; + _themeTint = themeTint; + _hashCode = 7 ^ _themeColor.GetHashCode() ^ _themeTint.GetHashCode(); HasValue = true; _colorType = XLColorType.Theme; } } -} +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Public.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Public.cs index abbfff8..d11f4a8 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Public.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Public.cs @@ -3,7 +3,13 @@ namespace ClosedXML.Excel { - public enum XLColorType { Color, Theme, Indexed } + public enum XLColorType + { + Color, + Theme, + Indexed + } + public enum XLThemeColor { Background1, @@ -19,19 +25,24 @@ Hyperlink, FollowedHyperlink } + public partial class XLColor : IEquatable { + private readonly XLColorType _colorType; + private readonly int _hashCode; + private readonly Int32 _indexed; + private readonly XLThemeColor _themeColor; + private readonly Double _themeTint; + + private Color _color; public Boolean HasValue { get; private set; } - private readonly XLColorType _colorType; - public XLColorType ColorType { - get - { - return _colorType; - } + public XLColorType ColorType + { + get { return _colorType; } } - private Color color; - public Color Color + + public Color Color { get { @@ -41,11 +52,10 @@ if (_colorType == XLColorType.Indexed) return IndexedColors[_indexed].Color; - return color; + return _color; } } - private readonly Int32 _indexed; public Int32 Indexed { get @@ -60,7 +70,6 @@ } } - private readonly XLThemeColor _themeColor; public XLThemeColor ThemeColor { get @@ -70,52 +79,53 @@ if (ColorType == XLColorType.Indexed) throw new Exception("Cannot convert indexed color to theme color."); - + throw new Exception("Cannot convert Color to theme color."); } - } - private readonly Double _themeTint; public Double ThemeTint { get { if (ColorType == XLColorType.Theme) - return _themeTint; + return _themeTint; if (ColorType == XLColorType.Indexed) throw new Exception("Cannot extract theme tint from an indexed color."); - return color.A / 255.0; + return _color.A/255.0; } } + #region IEquatable Members + public bool Equals(XLColor other) { - var otherC = other as XLColor; - if (_colorType == otherC._colorType) + if (_colorType == other._colorType) { if (_colorType == XLColorType.Color) { - return color.ToArgb() == otherC.color.ToArgb(); + return _color.ToArgb() == other._color.ToArgb(); } if (_colorType == XLColorType.Theme) { - return _themeColor == otherC._themeColor - && Math.Abs(_themeTint - otherC._themeTint) < XLHelper.Epsilon; + return _themeColor == other._themeColor + && Math.Abs(_themeTint - other._themeTint) < XLHelper.Epsilon; } - return _indexed == otherC._indexed; + return _indexed == other._indexed; } return false; } + + #endregion + public override bool Equals(object obj) { - return Equals((XLColor)obj); + return Equals((XLColor) obj); } - private readonly int _hashCode; public override int GetHashCode() { return _hashCode; @@ -138,7 +148,7 @@ if (ReferenceEquals(left, right)) return true; // If one is null, but not both, return false. - if ((left as object) == null || (right as Object)== null) return false; + if ((left as object) == null || (right as Object) == null) return false; return left.Equals(right); } @@ -148,4 +158,4 @@ return !(left == right); } } -} +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs index c3e63ae..9493243 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs @@ -524,6 +524,7 @@ { } + public XLWorkbook(XLEventTracking eventTracking) { EventTracking = eventTracking; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs index 86bff4a..db0e773 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs @@ -180,7 +180,7 @@ if (mergedCells != null) { foreach (MergeCell mergeCell in mergedCells.Elements()) - ws.Range(mergeCell.Reference).Merge(); + ws.Range(mergeCell.Reference).Merge(false); } } else if (reader.ElementType == typeof(Columns))