/// <summary> /// Перенести область графиков /// </summary> /// <param name="chartPart">Область графиков для перемещения</param> /// <param name="topLeft">Левая верхняя позиция</param> /// <param name="bottomRight">Нижняя правая позиция</param> /// <returns>true - если операция выполнилась успешно, false - в обратном случае.</returns> public static bool RelocateTo(this ChartPart chartPart, Drawing.Spreadsheet.FromMarker topLeft, Drawing.Spreadsheet.ToMarker bottomRight) { var theAnchor = chartPart.Anchor(); if (theAnchor == null) { return(false); } theAnchor.FromMarker = topLeft; theAnchor.ToMarker = bottomRight; return(true); }
/// <summary> /// Перенести область графиков /// </summary> /// <param name="chartPart">Область графиков для перемещения</param> /// <param name="columnNum">Номер колонки (соответствует левому краю области)</param> /// <param name="rowNum">Номер строки (соответствует верхнему краю области)</param> /// <param name="columnOffset">Отклонение от левого края ячейки</param> /// <param name="rowOffset">Отклонение от верхнего края ячейки</param> /// <returns>true - если операция выполнилась успешно, false - в обратном случае.</returns> public static bool RelocateTo(this ChartPart chartPart, int columnNum, int rowNum, long columnOffset = 0, long rowOffset = 0) { var theAnchor = chartPart.Anchor(); if (theAnchor == null) { return(false); } if (theAnchor.FromMarker == null || theAnchor.ToMarker == null) { return(false); } int top, bottom; long topOffset, bottomOffset; int left, right; long leftOffset, rightOffset; try { top = int.Parse(theAnchor.FromMarker.RowId.InnerText); topOffset = long.Parse(theAnchor.FromMarker.RowOffset.InnerText); left = int.Parse(theAnchor.FromMarker.ColumnId.InnerText); leftOffset = long.Parse(theAnchor.FromMarker.ColumnOffset.InnerText); bottom = int.Parse(theAnchor.ToMarker.RowId.InnerText); bottomOffset = long.Parse(theAnchor.ToMarker.RowOffset.InnerText); right = int.Parse(theAnchor.ToMarker.ColumnId.InnerText); rightOffset = long.Parse(theAnchor.ToMarker.ColumnOffset.InnerText); } catch { return(false); } var distanceX = right - left; var distanceXOffset = rightOffset - leftOffset; var distanceY = bottom - top; var distanceYOffset = bottomOffset - topOffset; int newTop = rowNum - 1; long newTopOffset = rowOffset; int newLeft = columnNum - 1; long newLeftOffset = columnOffset; int newBottom = newTop + distanceY; long newBottomOffset = newTopOffset + distanceYOffset; int newRight = newLeft + distanceX; long newRightOffset = newLeftOffset + distanceXOffset; var topLeft = new Drawing.Spreadsheet.FromMarker() { ColumnId = new ColumnId(newLeft.ToString()), ColumnOffset = new ColumnOffset(newLeftOffset.ToString()), RowId = new RowId(newTop.ToString()), RowOffset = new RowOffset(newTopOffset.ToString()) }; var bottomRight = new Drawing.Spreadsheet.ToMarker() { ColumnId = new ColumnId(newRight.ToString()), ColumnOffset = new ColumnOffset(newRightOffset.ToString()), RowId = new RowId(newBottom.ToString()), RowOffset = new RowOffset(newBottomOffset.ToString()) }; chartPart.RelocateTo(topLeft, bottomRight); return(true); }