Spread for WinForms中提供了获取单元格、行和列实际大小的方法,分别如下:
单元格实际大小:
fpSpread1.ActiveSheet.GetPreferredCellSize(0, 0);
行实际高度:
fpSpread1.ActiveSheet.GetPreferredRowHeight(0);
列实际宽度:
fpSpread1.ActiveSheet.GetPreferredColumnWidth(0);
在通过 GetPreferredRowHeight 获取有合并单元格的行的行高时,可能不是十分准确,这是我们可以通过以下方法来计算这样行的准确高度,代码如下:
private float GetRowBestHeight(int viRow)
{
Graphics vgphGraphics = fpSpread1.CreateGraphics();
int iLoop = 0;
float fBestHeight = 0;
SizeF sfBestSize = default(SizeF);
float fWidth = 0;
while ((iLoop < fpSpread1.ActiveSheet.ColumnCount - 1))
{
fWidth = 0;
for (int iTemp = 0; iTemp <= (fpSpread1.ActiveSheet.Cells[viRow, iLoop].ColumnSpan - 1); iTemp++)
{
fWidth += fpSpread1.ActiveSheet.Columns[iLoop + iTemp].Width;
}
sfBestSize = vgphGraphics.MeasureString(fpSpread1.ActiveSheet.Cells[viRow, iLoop].Text, fpSpread1.Font, Convert.ToInt32(fWidth));
if (sfBestSize.Height > fBestHeight)
{
fBestHeight = sfBestSize.Height;
}
iLoop += fpSpread1.ActiveSheet.Cells[viRow, iLoop].ColumnSpan;
}
return fBestHeight;
}
运行截图:
源码下载:
