找回密码
 立即注册

QQ登录

只需一步,快速开始

generalye

注册会员

30

主题

58

帖子

194

积分

注册会员

积分
194

活字格认证

generalye
注册会员   /  发表于:2015-6-27 18:15  /   查看:6131  /  回复:9
在模版中添加了一个自定义公式,然后程序运行中在公式所在单元格前面或上面添加了行列,单元格的位置已经发生了变化,如何获取到公式的新位置

9 个回复

倒序浏览
frank.zhang
社区贡献组   /  发表于:2015-6-29 10:04:00
沙发
您好,问题已经收到,我这边正在帮您处理。请稍后。
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-6-29 15:12:00
板凳
您好,
您可以给单元格设定一个Tag。
  1. SetTag(1,1,"CubeFunctionInfo");
复制代码
然后,直接取
  1. fpSpread1.ActiveSheet.Cells["CubeFunctionInfo"];
复制代码

希望可以帮助到您。
回复 使用道具 举报
generalye
注册会员   /  发表于:2015-6-29 19:01:00
地板
回复 3楼frank.zhang的帖子

如果一个模版中使用了多个相同的公式,这个方法就行不通了
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-6-30 09:17:00
5#
您好,
Tag设置的控制力度是单元格,如果使用多个公式,可以使用多个Tag。
希望能够帮助到您。
回复 使用道具 举报
generalye
注册会员   /  发表于:2015-7-1 16:38:00
6#
回复 5楼frank.zhang的帖子

过个Tag值都是同一个公式,我还是不知道当前正在计算的公式在哪儿单元格上呀,因为Tag值重复
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-7-1 17:41:00
7#
您好,
您使用的需求场景是什么?您是否方便描述一下,我们这边可以将问题反馈给给产品组。
回复 使用道具 举报
generalye
注册会员   /  发表于:2015-7-1 18:42:00
8#
回复 7楼frank.zhang的帖子

需求:当执行Evaluate方法时,能获取到当前正在执行Evaluate方法的自定义公式的坐标信息,自定义公式在同一个模版中也会多次使用。
获取公式坐标信息的目的是:根据获取到坐标再获取一些数据参与自定义公式内部的计算
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-7-2 10:57:00
9#
您好,
解决方案步骤:
1.给多个单元格设置Tag
  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             FarPoint.Win.Spread.SheetView sv;
  4.             sv = fpSpread1.ActiveSheet;
  5.             sv.AddCustomFunction((new CubeFunctionInfo()));
  6.             sv.SetFormula(1, 1, "CUBE(4,\"cell1\")");
  7.             sv.SetFormula(2, 2, "CUBE(4,\"cell2\")");
  8.             sv.SetTag(1, 1, "cell1");
  9.             sv.SetTag(2, 2, "cell2");
  10.         }
复制代码


2.在增加行列的时候,根据Tag取到新的位置
  1.         private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             this.fpSpread1.ActiveSheet.Rows.Add(1, 1);
  4.             FarPoint.Win.Spread.Cell range1 = this.fpSpread1.ActiveSheet.Cells["cell1"];
  5.             FarPoint.Win.Spread.Cell range2 = this.fpSpread1.ActiveSheet.Cells["cell2"];
  6.         }
复制代码


3.调用的时候,通过参数,取到单元格的Tag
  1.         public class CubeFunctionInfo : FarPoint.CalcEngine.FunctionInfo
  2.         {
  3.             public override string Name { get { return "CUBE"; } }
  4.             public override int MinArgs { get { return 1; } }
  5.             public override int MaxArgs { get { return 2; } }
  6.             public override object Evaluate(object[] args)
  7.             {
  8.                 //args[1] = ??
  9.                 double num = FarPoint.CalcEngine.CalcConvert.ToDouble(args[0]);
  10.                 return num * num * num;
  11.             }
  12.         }
复制代码


需要的注意的是:
您需要通过代码来维护一个自定义公式和位置的关系。这个需要一定的工作量。

希望可以帮助到您。
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-7-20 10:19:00
10#
为了给你提供更优质的服务,请对本次服务进行评分。
我们会认真对待你提出的宝贵意见,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部