diff --git a/ClosedXML/Excel/Drawings/IXLMarker.cs b/ClosedXML/Excel/Drawings/IXLMarker.cs
deleted file mode 100644
index d5c2ef4..0000000
--- a/ClosedXML/Excel/Drawings/IXLMarker.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System.Drawing;
-
-namespace ClosedXML.Excel.Drawings
-{
- internal interface IXLMarker
- {
- IXLAddress Address { get; set; }
- Point Offset { get; set; }
- }
-}
diff --git a/ClosedXML/Excel/Drawings/IXLPicture.cs b/ClosedXML/Excel/Drawings/IXLPicture.cs
index cf2245d..2036470 100644
--- a/ClosedXML/Excel/Drawings/IXLPicture.cs
+++ b/ClosedXML/Excel/Drawings/IXLPicture.cs
@@ -1,3 +1,4 @@
+// Keep this file CodeMaid organised and cleaned
using System;
using System.Drawing;
using System.IO;
@@ -6,20 +7,7 @@
{
public interface IXLPicture : IDisposable
{
- IXLAddress BottomRightCellAddress { get; }
-
- ///
- /// Create a copy of the picture on a different worksheet.
- ///
- /// The worksheet to which the picture will be copied.
- /// A created copy of the picture.
- IXLPicture CopyTo(IXLWorksheet targetSheet);
-
- ///
- /// Create a copy of the picture on the same worksheet.
- ///
- /// A created copy of the picture.
- IXLPicture Duplicate();
+ IXLCell BottomRightCell { get; }
///
/// Type of image. The supported formats are defined by OpenXML's ImagePartType.
@@ -45,32 +33,45 @@
Int32 Top { get; set; }
- IXLAddress TopLeftCellAddress { get; }
+ IXLCell TopLeftCell { get; }
Int32 Width { get; set; }
IXLWorksheet Worksheet { get; }
///
+ /// Create a copy of the picture on a different worksheet.
+ ///
+ /// The worksheet to which the picture will be copied.
+ /// A created copy of the picture.
+ IXLPicture CopyTo(IXLWorksheet targetSheet);
+
+ ///
/// Deletes this picture.
///
void Delete();
+ ///
+ /// Create a copy of the picture on the same worksheet.
+ ///
+ /// A created copy of the picture.
+ IXLPicture Duplicate();
+
Point GetOffset(XLMarkerPosition position);
IXLPicture MoveTo(Int32 left, Int32 top);
- IXLPicture MoveTo(IXLAddress cell);
+ IXLPicture MoveTo(IXLCell cell);
- IXLPicture MoveTo(IXLAddress cell, Int32 xOffset, Int32 yOffset);
+ IXLPicture MoveTo(IXLCell cell, Int32 xOffset, Int32 yOffset);
- IXLPicture MoveTo(IXLAddress cell, Point offset);
+ IXLPicture MoveTo(IXLCell cell, Point offset);
- IXLPicture MoveTo(IXLAddress fromCell, IXLAddress toCell);
+ IXLPicture MoveTo(IXLCell fromCell, IXLCell toCell);
- IXLPicture MoveTo(IXLAddress fromCell, Int32 fromCellXOffset, Int32 fromCellYOffset, IXLAddress toCell, Int32 toCellXOffset, Int32 toCellYOffset);
+ IXLPicture MoveTo(IXLCell fromCell, Int32 fromCellXOffset, Int32 fromCellYOffset, IXLCell toCell, Int32 toCellXOffset, Int32 toCellYOffset);
- IXLPicture MoveTo(IXLAddress fromCell, Point fromOffset, IXLAddress toCell, Point toOffset);
+ IXLPicture MoveTo(IXLCell fromCell, Point fromOffset, IXLCell toCell, Point toOffset);
IXLPicture Scale(Double factor, Boolean relativeToOriginal = false);
diff --git a/ClosedXML/Excel/Drawings/XLMarker.cs b/ClosedXML/Excel/Drawings/XLMarker.cs
index f48bf5c..57d496a 100644
--- a/ClosedXML/Excel/Drawings/XLMarker.cs
+++ b/ClosedXML/Excel/Drawings/XLMarker.cs
@@ -1,23 +1,37 @@
+// Keep this file CodeMaid organised and cleaned
+using System;
using System.Diagnostics;
using System.Drawing;
namespace ClosedXML.Excel.Drawings
{
[DebuggerDisplay("{Address} {Offset}")]
- internal class XLMarker : IXLMarker
+ internal class XLMarker
{
- internal XLMarker(IXLAddress address)
- : this(address, new Point(0, 0))
+ // Using a range to store the location so that it gets added to the range repository
+ // and hence will be adjusted when there are insertions / deletions
+ private readonly IXLRange rangeCell;
+
+ internal XLMarker(IXLCell cell)
+ : this(cell.AsRange(), new Point(0, 0))
{ }
- internal XLMarker(IXLAddress address, Point offset)
+ internal XLMarker(IXLCell cell, Point offset)
+ : this(cell.AsRange(), offset)
+ { }
+
+ private XLMarker(IXLRange rangeCell, Point offset)
{
- this.Address = address;
+ if (rangeCell.RowCount() != 1 || rangeCell.ColumnCount() != 1)
+ throw new ArgumentException("Range should contain only one cell.", nameof(rangeCell));
+
+ this.rangeCell = rangeCell;
this.Offset = offset;
}
- public IXLAddress Address { get; set; }
-
+ public IXLCell Cell { get => rangeCell.FirstCell(); }
+ public Int32 ColumnNumber { get => rangeCell.RangeAddress.FirstAddress.ColumnNumber; }
public Point Offset { get; set; }
+ public Int32 RowNumber { get => rangeCell.RangeAddress.FirstAddress.RowNumber; }
}
}
diff --git a/ClosedXML/Excel/Drawings/XLPicture.cs b/ClosedXML/Excel/Drawings/XLPicture.cs
index 4ec84de..3a766e3 100644
--- a/ClosedXML/Excel/Drawings/XLPicture.cs
+++ b/ClosedXML/Excel/Drawings/XLPicture.cs
@@ -1,3 +1,4 @@
+// Keep this file CodeMaid organised and cleaned
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -96,7 +97,7 @@
{
this.Worksheet = worksheet ?? throw new ArgumentNullException(nameof(worksheet));
this.Placement = XLPicturePlacement.MoveAndSize;
- this.Markers = new Dictionary()
+ this.Markers = new Dictionary()
{
[XLMarkerPosition.TopLeft] = null,
[XLMarkerPosition.BottomRight] = null
@@ -110,17 +111,18 @@
this.id = 1;
}
- public IXLAddress BottomRightCellAddress
+ public IXLCell BottomRightCell
{
get
{
- return Markers[XLMarkerPosition.BottomRight].Address;
+ return Markers[XLMarkerPosition.BottomRight].Cell;
}
private set
{
if (!value.Worksheet.Equals(this.Worksheet))
- throw new ArgumentOutOfRangeException(nameof(value.Worksheet));
+ throw new InvalidOperationException("A picture and its anchor cells must be on the same worksheet");
+
this.Markers[XLMarkerPosition.BottomRight] = new XLMarker(value);
}
}
@@ -160,7 +162,7 @@
if (this.Placement != XLPicturePlacement.FreeFloating)
throw new ArgumentException("To set the left-hand offset, the placement should be FreeFloating");
- Markers[XLMarkerPosition.TopLeft] = new XLMarker(Worksheet.Cell(1, 1).Address, new Point(value, this.Top));
+ Markers[XLMarkerPosition.TopLeft] = new XLMarker(Worksheet.Cell(1, 1), new Point(value, this.Top));
}
}
@@ -192,21 +194,21 @@
if (this.Placement != XLPicturePlacement.FreeFloating)
throw new ArgumentException("To set the top offset, the placement should be FreeFloating");
- Markers[XLMarkerPosition.TopLeft] = new XLMarker(Worksheet.Cell(1, 1).Address, new Point(this.Left, value));
+ Markers[XLMarkerPosition.TopLeft] = new XLMarker(Worksheet.Cell(1, 1), new Point(this.Left, value));
}
}
- public IXLAddress TopLeftCellAddress
+ public IXLCell TopLeftCell
{
get
{
- return Markers[XLMarkerPosition.TopLeft].Address;
+ return Markers[XLMarkerPosition.TopLeft].Cell;
}
private set
{
if (!value.Worksheet.Equals(this.Worksheet))
- throw new ArgumentOutOfRangeException(nameof(value.Worksheet));
+ throw new InvalidOperationException("A picture and its anchor cells must be on the same worksheet");
this.Markers[XLMarkerPosition.TopLeft] = new XLMarker(value);
}
@@ -225,10 +227,20 @@
public IXLWorksheet Worksheet { get; }
- internal IDictionary Markers { get; private set; }
+ internal IDictionary Markers { get; private set; }
internal String RelId { get; set; }
+ ///
+ /// Create a copy of the picture on a different worksheet.
+ ///
+ /// The worksheet to which the picture will be copied.
+ /// A created copy of the picture.
+ public IXLPicture CopyTo(IXLWorksheet targetSheet)
+ {
+ return CopyTo((XLWorksheet)targetSheet);
+ }
+
public void Delete()
{
Worksheet.Pictures.Delete(this.Name);
@@ -239,6 +251,15 @@
this.ImageStream.Dispose();
}
+ ///
+ /// Create a copy of the picture on the same worksheet.
+ ///
+ /// A created copy of the picture.
+ public IXLPicture Duplicate()
+ {
+ return CopyTo(Worksheet);
+ }
+
public Point GetOffset(XLMarkerPosition position)
{
return Markers[position].Offset;
@@ -252,45 +273,45 @@
return this;
}
- public IXLPicture MoveTo(IXLAddress cell)
+ public IXLPicture MoveTo(IXLCell cell)
{
return MoveTo(cell, 0, 0);
}
- public IXLPicture MoveTo(IXLAddress cell, Int32 xOffset, Int32 yOffset)
+ public IXLPicture MoveTo(IXLCell cell, Int32 xOffset, Int32 yOffset)
{
return MoveTo(cell, new Point(xOffset, yOffset));
}
- public IXLPicture MoveTo(IXLAddress cell, Point offset)
+ public IXLPicture MoveTo(IXLCell cell, Point offset)
{
if (cell == null) throw new ArgumentNullException(nameof(cell));
this.Placement = XLPicturePlacement.Move;
- this.TopLeftCellAddress = cell;
+ this.TopLeftCell = cell;
this.Markers[XLMarkerPosition.TopLeft].Offset = offset;
return this;
}
- public IXLPicture MoveTo(IXLAddress fromCell, IXLAddress toCell)
+ public IXLPicture MoveTo(IXLCell fromCell, IXLCell toCell)
{
return MoveTo(fromCell, 0, 0, toCell, 0, 0);
}
- public IXLPicture MoveTo(IXLAddress fromCell, Int32 fromCellXOffset, Int32 fromCellYOffset, IXLAddress toCell, Int32 toCellXOffset, Int32 toCellYOffset)
+ public IXLPicture MoveTo(IXLCell fromCell, Int32 fromCellXOffset, Int32 fromCellYOffset, IXLCell toCell, Int32 toCellXOffset, Int32 toCellYOffset)
{
return MoveTo(fromCell, new Point(fromCellXOffset, fromCellYOffset), toCell, new Point(toCellXOffset, toCellYOffset));
}
- public IXLPicture MoveTo(IXLAddress fromCell, Point fromOffset, IXLAddress toCell, Point toOffset)
+ public IXLPicture MoveTo(IXLCell fromCell, Point fromOffset, IXLCell toCell, Point toOffset)
{
if (fromCell == null) throw new ArgumentNullException(nameof(fromCell));
if (toCell == null) throw new ArgumentNullException(nameof(toCell));
this.Placement = XLPicturePlacement.MoveAndSize;
- this.TopLeftCellAddress = fromCell;
+ this.TopLeftCell = fromCell;
this.Markers[XLMarkerPosition.TopLeft].Offset = fromOffset;
- this.BottomRightCellAddress = toCell;
+ this.BottomRightCell = toCell;
this.Markers[XLMarkerPosition.BottomRight].Offset = toOffset;
return this;
@@ -326,25 +347,6 @@
return this;
}
- ///
- /// Create a copy of the picture on a different worksheet.
- ///
- /// The worksheet to which the picture will be copied.
- /// A created copy of the picture.
- public IXLPicture CopyTo(IXLWorksheet targetSheet)
- {
- return CopyTo((XLWorksheet) targetSheet);
- }
-
- ///
- /// Create a copy of the picture on the same worksheet.
- ///
- /// A created copy of the picture.
- public IXLPicture Duplicate()
- {
- return CopyTo(Worksheet);
- }
-
internal IXLPicture CopyTo(XLWorksheet targetSheet)
{
if (targetSheet == null)
@@ -368,18 +370,11 @@
break;
case XLPicturePlacement.Move:
- var newAddress = new XLAddress(targetSheet, TopLeftCellAddress.RowNumber,
- TopLeftCellAddress.ColumnNumber, false, false);
- newPicture.MoveTo(newAddress, GetOffset(XLMarkerPosition.TopLeft));
+ newPicture.MoveTo(targetSheet.Cell(TopLeftCell.Address), GetOffset(XLMarkerPosition.TopLeft));
break;
case XLPicturePlacement.MoveAndSize:
- var newFromAddress = new XLAddress(targetSheet, TopLeftCellAddress.RowNumber,
- TopLeftCellAddress.ColumnNumber, false, false);
- var newToAddress = new XLAddress(targetSheet, BottomRightCellAddress.RowNumber,
- BottomRightCellAddress.ColumnNumber, false, false);
-
- newPicture.MoveTo(newFromAddress, GetOffset(XLMarkerPosition.TopLeft), newToAddress,
+ newPicture.MoveTo(targetSheet.Cell(TopLeftCell.Address), GetOffset(XLMarkerPosition.TopLeft), targetSheet.Cell(BottomRightCell.Address),
GetOffset(XLMarkerPosition.BottomRight));
break;
}
diff --git a/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/Excel/XLWorkbook_Load.cs
index dbd5e51..2357cb7 100644
--- a/ClosedXML/Excel/XLWorkbook_Load.cs
+++ b/ClosedXML/Excel/XLWorkbook_Load.cs
@@ -907,7 +907,7 @@
{
var oneCellAnchor = anchor as Xdr.OneCellAnchor;
var from = LoadMarker(ws, oneCellAnchor.FromMarker);
- picture.MoveTo(from.Address, from.Offset);
+ picture.MoveTo(from.Cell, from.Offset);
}
else if (anchor is Xdr.TwoCellAnchor)
{
@@ -917,7 +917,7 @@
if (twoCellAnchor.EditAs == null || !twoCellAnchor.EditAs.HasValue || twoCellAnchor.EditAs.Value == Xdr.EditAsValues.TwoCell)
{
- picture.MoveTo(from.Address, from.Offset, to.Address, to.Offset);
+ picture.MoveTo(from.Cell, from.Offset, to.Cell, to.Offset);
}
else if (twoCellAnchor.EditAs.Value == Xdr.EditAsValues.Absolute)
{
@@ -932,7 +932,7 @@
}
else if (twoCellAnchor.EditAs.Value == Xdr.EditAsValues.OneCell)
{
- picture.MoveTo(from.Address, from.Offset);
+ picture.MoveTo(from.Cell, from.Offset);
}
}
}
@@ -945,12 +945,12 @@
return Convert.ToInt32(emu * resolution / 914400);
}
- private static IXLMarker LoadMarker(IXLWorksheet ws, Xdr.MarkerType marker)
+ private static XLMarker LoadMarker(IXLWorksheet ws, Xdr.MarkerType marker)
{
var row = Math.Min(XLHelper.MaxRowNumber, Math.Max(1, Convert.ToInt32(marker.RowId.InnerText) + 1));
var column = Math.Min(XLHelper.MaxColumnNumber, Math.Max(1, Convert.ToInt32(marker.ColumnId.InnerText) + 1));
return new XLMarker(
- ws.Cell(row, column).Address,
+ ws.Cell(row, column),
new Point(
ConvertFromEnglishMetricUnits(Convert.ToInt32(marker.ColumnOffset.InnerText), GraphicsUtils.Graphics.DpiX),
ConvertFromEnglishMetricUnits(Convert.ToInt32(marker.RowOffset.InnerText), GraphicsUtils.Graphics.DpiY)
diff --git a/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/Excel/XLWorkbook_Save.cs
index 8f654fe..3d839de 100644
--- a/ClosedXML/Excel/XLWorkbook_Save.cs
+++ b/ClosedXML/Excel/XLWorkbook_Save.cs
@@ -3077,21 +3077,21 @@
case Drawings.XLPicturePlacement.MoveAndSize:
var moveAndSizeFromMarker = pic.Markers[Drawings.XLMarkerPosition.TopLeft];
- if (moveAndSizeFromMarker == null) moveAndSizeFromMarker = new Drawings.XLMarker(picture.Worksheet.Cell("A1").Address);
+ if (moveAndSizeFromMarker == null) moveAndSizeFromMarker = new Drawings.XLMarker(picture.Worksheet.Cell("A1"));
fMark = new Xdr.FromMarker
{
- ColumnId = new Xdr.ColumnId((moveAndSizeFromMarker.Address.ColumnNumber - 1).ToInvariantString()),
- RowId = new Xdr.RowId((moveAndSizeFromMarker.Address.RowNumber - 1).ToInvariantString()),
+ ColumnId = new Xdr.ColumnId((moveAndSizeFromMarker.ColumnNumber - 1).ToInvariantString()),
+ RowId = new Xdr.RowId((moveAndSizeFromMarker.RowNumber - 1).ToInvariantString()),
ColumnOffset = new Xdr.ColumnOffset(ConvertToEnglishMetricUnits(moveAndSizeFromMarker.Offset.X, GraphicsUtils.Graphics.DpiX).ToInvariantString()),
RowOffset = new Xdr.RowOffset(ConvertToEnglishMetricUnits(moveAndSizeFromMarker.Offset.Y, GraphicsUtils.Graphics.DpiY).ToInvariantString())
};
var moveAndSizeToMarker = pic.Markers[Drawings.XLMarkerPosition.BottomRight];
- if (moveAndSizeToMarker == null) moveAndSizeToMarker = new Drawings.XLMarker(picture.Worksheet.Cell("A1").Address, new System.Drawing.Point(picture.Width, picture.Height));
+ if (moveAndSizeToMarker == null) moveAndSizeToMarker = new Drawings.XLMarker(picture.Worksheet.Cell("A1"), new System.Drawing.Point(picture.Width, picture.Height));
tMark = new Xdr.ToMarker
{
- ColumnId = new Xdr.ColumnId((moveAndSizeToMarker.Address.ColumnNumber - 1).ToInvariantString()),
- RowId = new Xdr.RowId((moveAndSizeToMarker.Address.RowNumber - 1).ToInvariantString()),
+ ColumnId = new Xdr.ColumnId((moveAndSizeToMarker.ColumnNumber - 1).ToInvariantString()),
+ RowId = new Xdr.RowId((moveAndSizeToMarker.RowNumber - 1).ToInvariantString()),
ColumnOffset = new Xdr.ColumnOffset(ConvertToEnglishMetricUnits(moveAndSizeToMarker.Offset.X, GraphicsUtils.Graphics.DpiX).ToInvariantString()),
RowOffset = new Xdr.RowOffset(ConvertToEnglishMetricUnits(moveAndSizeToMarker.Offset.Y, GraphicsUtils.Graphics.DpiY).ToInvariantString())
};
@@ -3124,11 +3124,11 @@
case Drawings.XLPicturePlacement.Move:
var moveFromMarker = pic.Markers[Drawings.XLMarkerPosition.TopLeft];
- if (moveFromMarker == null) moveFromMarker = new Drawings.XLMarker(picture.Worksheet.Cell("A1").Address);
+ if (moveFromMarker == null) moveFromMarker = new Drawings.XLMarker(picture.Worksheet.Cell("A1"));
fMark = new Xdr.FromMarker
{
- ColumnId = new Xdr.ColumnId((moveFromMarker.Address.ColumnNumber - 1).ToInvariantString()),
- RowId = new Xdr.RowId((moveFromMarker.Address.RowNumber - 1).ToInvariantString()),
+ ColumnId = new Xdr.ColumnId((moveFromMarker.ColumnNumber - 1).ToInvariantString()),
+ RowId = new Xdr.RowId((moveFromMarker.RowNumber - 1).ToInvariantString()),
ColumnOffset = new Xdr.ColumnOffset(ConvertToEnglishMetricUnits(moveFromMarker.Offset.X, GraphicsUtils.Graphics.DpiX).ToInvariantString()),
RowOffset = new Xdr.RowOffset(ConvertToEnglishMetricUnits(moveFromMarker.Offset.Y, GraphicsUtils.Graphics.DpiY).ToInvariantString())
};
diff --git a/ClosedXML_Examples/ImageHandling/ImageAnchors.cs b/ClosedXML_Examples/ImageHandling/ImageAnchors.cs
index b20b42d..2285c15 100644
--- a/ClosedXML_Examples/ImageHandling/ImageAnchors.cs
+++ b/ClosedXML_Examples/ImageHandling/ImageAnchors.cs
@@ -28,7 +28,7 @@
fs.Position = 0;
ws.AddPicture(fs, XLPictureFormat.Png, "Image11")
- .MoveTo(ws.Cell(1, 1).Address);
+ .MoveTo(ws.Cell(1, 1));
#endregion OneCellAnchor
@@ -38,7 +38,7 @@
fs.Position = 0;
ws.AddPicture(fs, XLPictureFormat.Png, "Image20")
- .MoveTo(ws.Cell(6, 5).Address, ws.Cell(9, 7).Address);
+ .MoveTo(ws.Cell(6, 5), ws.Cell(9, 7));
#endregion TwoCellAnchor
}
@@ -49,17 +49,17 @@
ws = wb.Worksheets.Add("Images3");
ws.AddPicture(fs, XLPictureFormat.Jpeg)
- .MoveTo(ws.Cell(2, 2).Address, 20, 5, ws.Cell(5, 5).Address, 30, 10)
- .MoveTo(ws.Cell(2, 2).Address, ws.Cell(5, 5).Address);
+ .MoveTo(ws.Cell(2, 2), 20, 5, ws.Cell(5, 5), 30, 10)
+ .MoveTo(ws.Cell(2, 2), ws.Cell(5, 5));
ws.AddPicture(fs, XLPictureFormat.Jpeg)
- .MoveTo(ws.Cell(6, 2).Address, 2, 2, ws.Cell(9, 5).Address, 2, 2)
- .MoveTo(ws.Cell(6, 2).Address, 20, 5, ws.Cell(9, 5).Address, 30, 10);
+ .MoveTo(ws.Cell(6, 2), 2, 2, ws.Cell(9, 5), 2, 2)
+ .MoveTo(ws.Cell(6, 2), 20, 5, ws.Cell(9, 5), 30, 10);
ws.AddPicture(fs, XLPictureFormat.Jpeg)
- .MoveTo(ws.Cell(10, 2).Address, 20, 5)
+ .MoveTo(ws.Cell(10, 2), 20, 5)
.Scale(0.2, true)
- .MoveTo(ws.Cell(10, 1).Address);
+ .MoveTo(ws.Cell(10, 1));
}
using (Stream fs = Assembly.GetExecutingAssembly().GetManifestResourceStream("ClosedXML_Examples.Resources.SampleImage.jpg"))
diff --git a/ClosedXML_Examples/ImageHandling/ImageFormats.cs b/ClosedXML_Examples/ImageHandling/ImageFormats.cs
index 1f21297..eaad0f8 100644
--- a/ClosedXML_Examples/ImageHandling/ImageFormats.cs
+++ b/ClosedXML_Examples/ImageHandling/ImageFormats.cs
@@ -18,7 +18,7 @@
ws = wb.Worksheets.Add("Jpg");
ws.AddPicture(fs, XLPictureFormat.Jpeg, "JpegImage")
- .MoveTo(ws.Cell(1, 1).Address);
+ .MoveTo(ws.Cell(1, 1));
#endregion Jpeg
}
@@ -29,7 +29,7 @@
ws = wb.Worksheets.Add("Png");
ws.AddPicture(fs, XLPictureFormat.Png, "PngImage")
- .MoveTo(ws.Cell(1, 1).Address);
+ .MoveTo(ws.Cell(1, 1));
#endregion Png
diff --git a/ClosedXML_Tests/Excel/ImageHandling/PictureTests.cs b/ClosedXML_Tests/Excel/ImageHandling/PictureTests.cs
index c071eb8..931b263 100644
--- a/ClosedXML_Tests/Excel/ImageHandling/PictureTests.cs
+++ b/ClosedXML_Tests/Excel/ImageHandling/PictureTests.cs
@@ -197,10 +197,10 @@
public void XLMarkerTests()
{
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
- XLMarker firstMarker = new XLMarker(ws.Cell(1, 10).Address, new Point(100, 0));
+ XLMarker firstMarker = new XLMarker(ws.Cell(1, 10), new Point(100, 0));
- Assert.AreEqual("J", firstMarker.Address.ColumnLetter);
- Assert.AreEqual(1, firstMarker.Address.RowNumber);
+ Assert.AreEqual(10, firstMarker.ColumnNumber);
+ Assert.AreEqual(1, firstMarker.RowNumber);
Assert.AreEqual(100, firstMarker.Offset.X);
Assert.AreEqual(0, firstMarker.Offset.Y);
}
@@ -352,7 +352,7 @@
Assert.AreEqual(original.Format, copy.Format);
Assert.AreEqual(original.Height, copy.Height);
Assert.AreEqual(original.Placement, copy.Placement);
- Assert.AreEqual(original.TopLeftCellAddress.ToString(), copy.TopLeftCellAddress.ToString());
+ Assert.AreEqual(original.TopLeftCell.ToString(), copy.TopLeftCell.ToString());
Assert.AreEqual(original.Width, copy.Width);
Assert.AreEqual(original.ImageStream.ToArray(), copy.ImageStream.ToArray(), "Image streams differ");
@@ -373,7 +373,6 @@
original = (ws1 as XLWorksheet).AddPicture(stream, "Picture 1", 2)
.WithPlacement(XLPicturePlacement.FreeFloating)
.MoveTo(220, 155) as XLPicture;
-
}
var ws2 = wb.Worksheets.Add("Sheet2");
@@ -390,11 +389,28 @@
Assert.AreEqual(original.Name, copy.Name);
Assert.AreEqual(original.Placement, copy.Placement);
Assert.AreEqual(original.Top, copy.Top);
- Assert.AreEqual(original.TopLeftCellAddress.ToString(), copy.TopLeftCellAddress.ToString());
+ Assert.AreEqual(original.TopLeftCell.ToString(), copy.TopLeftCell.ToString());
Assert.AreEqual(original.Width, copy.Width);
Assert.AreEqual(original.ImageStream.ToArray(), copy.ImageStream.ToArray(), "Image streams differ");
Assert.AreNotEqual(original.Id, copy.Id);
}
+
+ [Test]
+ public void PictureShiftsWhenInsertingRows()
+ {
+ using (var wb = new XLWorkbook())
+ using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("ClosedXML_Tests.Resource.Images.ImageHandling.png"))
+ {
+ var ws = wb.Worksheets.Add("ImageShift");
+ var picture = ws.AddPicture(stream, XLPictureFormat.Png, "PngImage")
+ .MoveTo(ws.Cell(5, 2))
+ .WithPlacement(XLPicturePlacement.Move);
+
+ ws.Row(2).InsertRowsBelow(20);
+
+ Assert.AreEqual(25, picture.TopLeftCell.Address.RowNumber);
+ }
+ }
}
}
diff --git a/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs b/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs
index c280c16..b847362 100644
--- a/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs
+++ b/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs
@@ -683,7 +683,7 @@
Assert.AreEqual(original.Name, copy.Name);
Assert.AreEqual(original.Placement, copy.Placement);
Assert.AreEqual(original.Top, copy.Top);
- Assert.AreEqual(original.TopLeftCellAddress.ToString(), copy.TopLeftCellAddress.ToString());
+ Assert.AreEqual(original.TopLeftCell.Address.ToString(), copy.TopLeftCell.Address.ToString());
Assert.AreEqual(original.Width, copy.Width);
Assert.AreEqual(original.ImageStream.ToArray(), copy.ImageStream.ToArray(), "Image streams differ");
}