找回密码
 立即注册

QQ登录

只需一步,快速开始

lh8350

论坛元老

33

主题

80

帖子

2万

积分

论坛元老

积分
23275

活字格认证

lh8350
论坛元老   /  发表于:2012-7-18 11:14  /   查看:9964  /  回复:12
1.jpg (11.55 KB, 下载次数: 207)

12 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-7-18 14:18:00
沙发
“如何将这个公式的值赋值给文本框”这个需求中的“文本框”是独立于Spread之外的TextBox控件吗,还是Spread中的每一个单元格。

如果所显示的Spread单元格不能设置公式,可以创建一个临时的SheetView,通过这个临时的SheetView来完成公式的计算,然后将计算的结果赋给文本框。
回复 使用道具 举报
lh8350
论坛元老   /  发表于:2012-7-18 14:32:00
板凳
private void fpSpread1_SelectionChanged(object sender, FarPoint.Win.Spread.SelectionChangedEventArgs e)
        {
            string rowStarLabel = e.Range.Row.ToString();
            string rowEndLabel = (e.Range.Row + e.Range.RowCount - 1).ToString();
            string colStarLabel = this.fpSpread1.Sheets[0].Columns[e.Range.Column].Label;
            string colEndLabel = this.fpSpread1.Sheets[0].Columns[e.Range.Column + e.Range.ColumnCount - 1].Label;
            string formula = "SUM(" + colStarLabel + rowStarLabel + ":" + colEndLabel + rowEndLabel + ")";
            FarPoint.Win.Spread.SheetView sheetview = new FarPoint.Win.Spread.SheetView();
            FarPoint.Win.Spread.CellType.NumberCellType numObj=new FarPoint.Win.Spread.CellType.NumberCellType();
            sheetview.Cells[1, 1].CellType = numObj;
            sheetview.Cells[1, 1].Formula = formula;
            button1.Text = sheetview.Cells[1, 1].Value.ToString();

        }
这样做的,但是不行啊,报错!要怎么写才可以呢?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-7-18 15:07:00
地板
应该是在拼接公式时有点不准确,你可以测试一下这段代码:
  1.     private void fpSpread1_SelectionChanged(object sender, FarPoint.Win.Spread.SelectionChangedEventArgs e)
  2.     {
  3.         string rowStarLabel = (e.Range.Row+1).ToString();
  4.         string rowEndLabel = (e.Range.Row + e.Range.RowCount).ToString();
  5.         string colStarLabel = this.fpSpread1.Sheets[0].Columns[e.Range.Column].Label;
  6.         string colEndLabel = this.fpSpread1.Sheets[0].Columns[e.Range.Column + e.Range.ColumnCount - 1].Label;
  7.         string formula = "SUM(" + colStarLabel + rowStarLabel + ":" + colEndLabel + rowEndLabel + ")";

  8.         FarPoint.Win.Spread.SheetView sheetview = new FarPoint.Win.Spread.SheetView();
  9.         sheetview.RowCount = fpSpread1.ActiveSheet.GetSelection(0).RowCount + 1;
  10.         sheetview.ColumnCount = fpSpread1.ActiveSheet.GetSelection(0).ColumnCount;

  11.         fpSpread1.ActiveSheet.ClipboardCopy();
  12.         sheetview.ClipboardPaste();

  13.         for (int i = 0; i < sheetview.Columns.Count; i++)
  14.         {
  15.             sheetview.Columns[i].ResetCellType();
  16.         }
  17.             
  18.         FarPoint.Win.Spread.CellType.NumberCellType numObj = new FarPoint.Win.Spread.CellType.NumberCellType();
  19.         sheetview.Cells[sheetview.RowCount - 1, 0].CellType = numObj;
  20.         sheetview.Cells[sheetview.RowCount - 1, 0].Formula = formula;
  21.         textBox1.Text = sheetview.Cells[sheetview.RowCount - 1, 0].Text;
  22.     }
复制代码
回复 使用道具 举报
lh8350
论坛元老   /  发表于:2012-7-18 15:22:00
5#
整个测试demo给我可以吗?谢谢!我怎么试着还是不行!
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-7-18 17:11:00
6#
VS2010 + Spread for WinForms 6.0.3505:
5256_Formula.zip (10.33 KB, 下载次数: 323)
回复 使用道具 举报
lh8350
论坛元老   /  发表于:2012-7-19 09:33:00
7#
用spread 5.0是不是不行啊?怎么我的还是不行呢?
回复 使用道具 举报
lh8350
论坛元老   /  发表于:2012-7-19 11:02:00
8#
我感觉好像不对,重新创建了一个sheetview,然后将公式复制给新创建的sheetview中的单元格,这个公式引用的应该是新创建的单元格的相应的值吧?不应该是原来选中区域的那个sheetview了,所以我的运行结果一直都是空的。dof,你看一下,是不是这样的呢?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-7-19 11:08:00
9#
这个代码是使用Spread for WinForms 5.0.3522.2008 + VS2008做的,可以实现该功能
运行程序,在Cells[0,0]/Cells[0,1]中输入数值,然后选中这两个单元格,此时TextBox会计算出相应的值


spread.png
WindowsFormsApplication2.zip (13.34 KB, 下载次数: 345)
回复 使用道具 举报
lh8350
论坛元老   /  发表于:2012-7-19 11:52:00
10#
因为你的复制的位置是是前两个单元格,是A1和B1,复制到一个新的sheetview以后,还是叫做A1,B1所以不出错,但是要是复制中间的,我觉得应该会有问题。我已经修改了代码,取新的sheetview中所有项目的和,就可以完成这个功能。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部