作成日: 2022/02/10 最終更新日: 2022/02/10
文書種別
制限事項
状況
回避方法あり
詳細
GetRangeBoundaryメソッドの戻り値はSystem.Drawing.Rectangle型の値であり、位置およびサイズはint型となります。
そのため、小数点以下の値が切り捨てられることにより、取得した指定範囲の位置とサイズが不正になる場合があります。
そのため、小数点以下の値が切り捨てられることにより、取得した指定範囲の位置とサイズが不正になる場合があります。
回避方法
下記は、GetRangeBoundaryメソッドの取得値をそのまま使用する代わりに、範囲の高さを元に計算した位置やサイズを使用して図形を描画する例です。
// 指定したセル範囲の絶対位置とサイズを取得
var rect = CellInfo.GetRangeBoundary(range);
// 回避策(高さを元に計算)
double top = 0;
for (int row = 0; row < range.Row; row++)
{
top += worksheet.Rows[row].RowHeight;
}
// ポイントからピクセルへ変換
top = top * 96 / 72d;
double height = worksheet.Rows[range.Row].RowHeight * 96 / 72d;
// 図形の描画
var shape = worksheet.Shapes.AddShapeInPixel(GrapeCity.Documents.Excel.Drawing.AutoShapeType.Rectangle, rect.Left, top, rect.Width, height);