public static xdr.TwoCellAnchor SetHeightInPixels(this xdr.TwoCellAnchor twoCellAnchor, double heightInPixels, double dpi = 96) { if (twoCellAnchor == null) { return(null); } var fromMareker = twoCellAnchor.FromMarker; if (!int.TryParse(fromMareker?.RowId?.Text, out var startRowId)) { throw new Exception($"Cannot get top left columm number of given shape. Found \"{fromMareker?.ColumnId?.Text}\""); } if (!int.TryParse(fromMareker?.RowOffset?.Text, out var startRowOffset)) { throw new Exception($"Cannot get top left column offset of given shape. Found \"{fromMareker?.ColumnOffset?.Text}\""); } var startRowNum = startRowId + 1; var _newNormalizedHeight = heightInPixels; var wdr = twoCellAnchor.ParentOfType <xdr.WorksheetDrawing>(); var wsPart = wdr.DrawingsPart.ParentPartOfType <WorksheetPart>(); var ws = wsPart.Worksheet; var endRowNum = startRowNum; var endRow = ws.GetRow(endRowNum); var startRowOffsetInPixels = Utils.ConvertEmuToPixels(startRowOffset, dpi); var offsetInPixels = _newNormalizedHeight - startRowOffsetInPixels; var rowHeight = endRow.GetHeightInPixels(dpi) - startRowOffsetInPixels; while (rowHeight <= offsetInPixels) { offsetInPixels -= rowHeight; endRowNum++; endRow = ws.GetRow(endRowNum); rowHeight = endRow.GetHeightInPixels(dpi); } var toMarker = twoCellAnchor.ToMarker; if (toMarker == null) { toMarker = new xdr.ToMarker(); twoCellAnchor.ToMarker = toMarker; } toMarker.SetRowNum(endRowNum); if (offsetInPixels < 0) { offsetInPixels = 0; } toMarker.SetTopOffset(Utils.ConvertPixelsToEmu(offsetInPixels, dpi)); return(twoCellAnchor); }
public static double GetWidthInPixels(this xdr.TwoCellAnchor twoCellAnchor, double dpi = 96) { if (twoCellAnchor == null) { throw new ArgumentNullException("Cannot get anchor width, null given."); } var fromMarker = twoCellAnchor.FromMarker; if (fromMarker == null) { fromMarker = new xdr.FromMarker().At("A1"); twoCellAnchor.FromMarker = fromMarker; } if (!int.TryParse(fromMarker?.ColumnId?.Text, out var startColumnId)) { throw new Exception($"Cannot get top left columm number of given shape. Found \"{fromMarker?.ColumnId?.Text}\""); } if (!int.TryParse(fromMarker?.ColumnOffset?.Text, out var startColumnOffset)) { throw new Exception($"Cannot get top left column offset of given shape. Found \"{fromMarker?.ColumnOffset?.Text}\""); } var toMarker = twoCellAnchor.ToMarker; if (toMarker == null) { toMarker = new xdr.ToMarker().At("C4"); twoCellAnchor.ToMarker = toMarker; } if (!int.TryParse(toMarker?.ColumnId?.Text, out var endColumnId)) { throw new Exception($"Cannot get top left columm number of given shape. Found \"{fromMarker?.ColumnId?.Text}\""); } if (!int.TryParse(toMarker?.ColumnOffset?.Text, out var endColumnOffset)) { throw new Exception($"Cannot get top left column offset of given shape. Found \"{fromMarker?.ColumnOffset?.Text}\""); } var startColumnNum = startColumnId + 1; var endColumnNum = endColumnId + 1; var wdr = twoCellAnchor.ParentOfType <xdr.WorksheetDrawing>(); var wsPart = wdr.DrawingsPart.ParentPartOfType <WorksheetPart>(); var ws = wsPart.Worksheet; var columnNum = startColumnNum; var totalWidth = 0d; while (columnNum <= endColumnNum) { var column = ws.GetColumn(columnNum); var columnWidth = column.GetWidthInPixels(dpi); totalWidth += columnWidth; columnNum++; } var startColumnOffsetInPixels = Utils.ConvertEmuToPixels(startColumnOffset, dpi); var endColumnOffsetInPixels = Utils.ConvertEmuToPixels(endColumnOffset, dpi); totalWidth += endColumnOffsetInPixels - startColumnOffsetInPixels; if (totalWidth < 0) { totalWidth = 0; } return(totalWidth); }