找回密码
 立即注册

QQ登录

只需一步,快速开始

taxsoft

中级会员

76

主题

246

帖子

608

积分

中级会员

积分
608

活字格认证微信认证勋章元老葡萄

taxsoft
中级会员   /  发表于:2012-10-15 16:32  /   查看:6091  /  回复:5
单元格输入了自定义公式并直接显示了计算结果,
但是保存为xml格式后重新打开
对应单元格显示为 #NAME?
即使执行当前sheet的 RecalculateAll() 也无法显示结果。

5 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2012-10-15 18:51:00
沙发
回复 1楼taxsoft的帖子

taxsoft 你好,
不好意思,我这边没能重现问题,能否传个 Demo 到论坛调试?
我的简单测试 Demo:
6323.zip (42.11 KB, 下载次数: 79)
回复 使用道具 举报
taxsoft
中级会员   /  发表于:2012-10-16 09:16:00
板凳
回复 1楼taxsoft的帖子

taxsoft 你好,
不好意思,我这边没能重现问题,能否传个 Demo 到论坛调试?
我的简单测试......
iceman 发表于 2012-10-15 18:51:00


你好,我讲的是自定义公式,比如我定义的 AAA('99',''00) = 99 在编辑的时候是正常的,但是保存后再打开就无法显示 99 了,显示 #NAME?
我现在找到原因了:
重新打开该文件的时候,我在当前Sheet重新注册了自定义公式,问题是,在打开的时候,自定义公式是不能够被识别的,也就成了非法公式
然后即使我注册,由于在单元格内容已经有了文本“#NAME?”,所以显示的依然是 #NAME?
除非我删除该单元格内容,才能显示公式的结果。

所以问题是,在何时注册公式是合适的?或者说注册的自定义公式(不是所单元格的自定义公式)是否可以自动保存到xml文件中?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-10-16 10:19:00
地板
回复 3楼taxsoft的帖子

taxsoft 你好,
请问是否在 自定义公式 类前添加 "[Serializable]”?下面是我的测试代码,成功保存了自定义公式:
  1.   public Form1()
  2.         {
  3.             InitializeComponent();
  4.         }

  5.         private void Form1_Load(object sender, EventArgs e)
  6.         {
  7.             CubeFunctionInfo fun = new CubeFunctionInfo();
  8.             this.fpSpread1.Sheets[0].AddCustomFunction(fun);
  9.             this.fpSpread1.Sheets[0].SetFormula(2, 0, "CUBE(5)");
  10.         }

  11.         private void saveXMLToolStripMenuItem_Click(object sender, EventArgs e)
  12.         {
  13.             this.fpSpread1.Save(System.IO.Path.Combine(Application.StartupPath, "test.xml"), false);
  14.         }

  15.         private void openXMLToolStripMenuItem_Click(object sender, EventArgs e)
  16.         {
  17.             this.fpSpread1.Open(System.IO.Path.Combine(Application.StartupPath, "test.xml"));
  18.         }
  19.     }
  20.     [Serializable]
  21.     public class CubeFunctionInfo : FunctionInfo
  22.     {
  23.         public override string Name { get { return "CUBE"; } }
  24.         public override int MinArgs { get { return 1; } }
  25.         public override int MaxArgs { get { return 1; } }
  26.         public override object Evaluate(object[] args)
  27.         {
  28.             double num = CalcConvert.ToDouble(args[0]);
  29.             return num * num * num;
  30.         }
  31.     }
复制代码
回复 使用道具 举报
taxsoft
中级会员   /  发表于:2012-10-16 14:41:00
5#
回复 3楼taxsoft的帖子

taxsoft 你好,
请问是否在 自定义公式 类前添加 "[Serializable]”?下面是我的测试代码,成功保
iceman 发表于 2012-10-16 10:19:00


非常感谢!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-10-16 16:41:00
6#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部