← 返回所有博客文章

在Excel中如果单元格内容长度超出了单元格的显示范围,此时,单元格将显示为“#######”的字符串,这样可以提示用户单元格未能显示全部内容,需要调整列宽以显示所有内容,此时,用户可以双击该列的边线调整列宽,或者以拖动的方式调整列宽,本文主要讲解在Spread for WinForms中如何实现该功能。

首先,我们需要定义一个自定义的单元格类型,如何重写PaintCell方法,根据单元格内容的长度与单元格的宽带来决定是否需要将单元格内容显示为“#######”

代码如下:

    public class CCellType : FarPoint.Win.Spread.CellType.TextCellType
    {
        public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
        {
            // 判断单元格内容是否为空,如果不为空就判断单元格内容是否超过了单元格的宽带
            if (value != null && g.MeasureString(value.ToString(),appearance.Font).Width > r.Width)
            {
                value = new string('#', value.ToString().Length);
            }

            base.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);
        }
    }

 

如何在Spread中使用该单元格类型:

    private void Form2_Load(object sender, EventArgs e)
    {
        fpSpread1.ActiveSheet.Columns[0].CellType = new CCellType();
        fpSpread1.ActiveSheet.Cells[0, 0].Value = "12345679";
        fpSpread1.ActiveSheet.Cells[1, 0].Value = "12345679123456789123456789";
    }

 

运行截图:

image

 

源码下载:Spread .NET 6 + VS2008

Spread_Cell.zip (12.89 kb)