找回密码
 立即注册

QQ登录

只需一步,快速开始

HNA_fengjie

论坛元老

39

主题

97

帖子

1万

积分

论坛元老

积分
14189

活字格认证

HNA_fengjie
论坛元老   /  发表于:2011-11-15 18:31  /   查看:5235  /  回复:3
你好!
   当我将单元格的类型设置为正则表达式类型后,导致单元格中的公式不能够运算,
我想用正则表达式控制输入,求助!

3 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2011-11-16 09:58:00
沙发
你说的指定单元格类型后无法计算,你是给参与计算的单元格设定为正则表达式类型,还是给设置公式的单元格设置为正则表达式类型,导致最后无法计算。

我新建了一个空白的aspx页面,然后添加以下代码,可以正常使用公式:
  1.         protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             //设置数据源
  4.             DataTable dt = new DataTable();
  5.             dt.Columns.Add("RegExpCellType", typeof(System.Double));
  6.             dt.Columns.Add("原始数据", typeof(System.String));

  7.             dt.Rows.Add(1, "1");
  8.             dt.Rows.Add(1.1, "1.1");
  9.             dt.Rows.Add(1.12, "1.12");
  10.             dt.Rows.Add(1.123, "1.123");
  11.             dt.Rows.Add(123.126, "123.126");

  12.             FpSpread1.DataSource = dt;

  13.             RegExpCellType rec = new RegExpCellType();
  14.             rec.ValidationExpression = @"^-?(0\.\d{2}|[1-9]\d*\.\d{2})$";

  15.             FpSpread1.Columns[0].CellType = rec;

  16.             FpSpread1.ActiveSheetView.AddUnboundRows(FpSpread1.ActiveSheetView.RowCount, 1);
  17.             FpSpread1.ActiveSheetView.Cells[FpSpread1.ActiveSheetView.RowCount - 1, 0].ResetCellType();
  18.             FpSpread1.ActiveSheetView.Cells[FpSpread1.ActiveSheetView.RowCount - 1, 0].Formula = "SUM(A1:A5)";
  19.             FpSpread1.ActiveSheetView.Cells[FpSpread1.ActiveSheetView.RowCount - 1, 1].Formula = "SUM(A1:A5)";

  20.         }
复制代码


如果我的设置和你的方法有区别,请将你的方法做一个Demo发送给我们,谢谢。
回复 使用道具 举报
HNA_fengjie
论坛元老   /  发表于:2011-11-16 15:28:00
板凳

回复 2# dof 的帖子

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                FpSpread1.Sheets[0].Rows.Count = 5;
                FpSpread1.Sheets[0].Columns.Count = 5;
               
                FpSpread1.Sheets[0].Cells[0, 0].Formula = "SUM(A2:A5)";
                SetDoubleCellType(FpSpread1.Sheets[0].Cells[0, 0]);
                for (int i = 1; i < 5; i++)
                {
                    SetDoubleCellType(FpSpread1.Sheets[0].Cells[i, 0]);
                }
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            FpSpread1.SaveChanges();
        }
        protected void SetDoubleCellType(FarPoint.Web.Spread.Cell cell)
        {
            

            FarPoint.Web.Spread.RegExpCellType rect = new FarPoint.Web.Spread.RegExpCellType();
            rect.ErrorMessage = "请输入规范数据!(例:12.34)";
            rect.ValidationExpression = @"^-?(0\.\d{1,2}|[1-9]\d*\.\d{1,2})$|0|[1-9]\d*";
            cell.CellType = rect;
        }

这个是写了一些简单地代码,但是点击按钮时公式时,公式并不加和
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2011-11-16 17:36:00
地板
有两点需要注意:
1、如果希望公式在客户端自动计算需要设置 FpSpread1.ClientAutoCalculation = true;
2、Sum()之类的公式,只对数值类型的CellType生效。
  1.         protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             if (!IsPostBack)
  4.             {
  5.                 //添加了下面一行代码
  6.                 FpSpread1.ClientAutoCalculation = true;

  7.                 FpSpread1.Sheets[0].Rows.Count = 5;
  8.                 FpSpread1.Sheets[0].Columns.Count = 5;

  9.                 FpSpread1.Sheets[0].Cells[0, 0].Formula = "SUM(A2:A5)";
  10.                 SetDoubleCellType(FpSpread1.Sheets[0].Cells[0, 0]);
  11.                 for (int i = 1; i < 5; i++)
  12.                 {
  13.                     SetDoubleCellType(FpSpread1.Sheets[0].Cells[i, 0]);
  14.                 }
  15.             }
  16.         }

  17.         protected void Button1_Click(object sender, EventArgs e)
  18.         {
  19.             FpSpread1.SaveChanges();
  20.         }
  21.         protected void SetDoubleCellType(FarPoint.Web.Spread.Cell cell)
  22.         {
  23.             //FarPoint.Web.Spread.RegExpCellType rect = new FarPoint.Web.Spread.RegExpCellType();
  24.             //rect.ErrorMessage = "请输入规范数据!(例:12.34)";
  25.             //rect.ValidationExpression = @"^-?(0\.\d{1,2}|[1-9]\d*\.\d{1,2})$|0|[1-9]\d*";

  26.             //使用自定义的CellType
  27.             cell.CellType = new MyDoubleCellType();
  28.         }
复制代码
关于MyDoubleCellType可以参考 http://gcdn.grapecity.com/showtopic-2563.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部