找回密码
 立即注册

QQ登录

只需一步,快速开始

信云软件
金牌服务用户   /  发表于:2022-3-10 10:50  /   查看:5207  /  回复:13
6金币
image.png104353331.png image.png541073607.png 在加载文件的时候因为自定义函数会去数据库查询数据,所以加载文件时页面会有几秒的空白页面,这时候我想做个转圈等待的效果,但是 this.fpSpread1.OpenExcel(Path) 这种加载数据的时候好像是异步的。 image.png317713317.png 我这种写法在他数据还没全部加载出来的时候就把转圈等待的窗体给关闭了,OpenExcel方法怎么判断他加载数据结束的那个点

最佳答案

查看完整内容

你这边的demo,我测试问题的原因在于,需要将spread通过Save方法保存为xml,或者通过SaveExcel方法保存为xlsx才行 你这边保存了xls,因此没有办法支持自定义公式

13 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-3-10 10:50:39
来自 14#
你这边的demo,我测试问题的原因在于,需要将spread通过Save方法保存为xml,或者通过SaveExcel方法保存为xlsx才行

你这边保存了xls,因此没有办法支持自定义公式
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-3-10 12:22:57
2#
openexcel方法不是异步方法,不过我看到你这边说是有自定义函数,这个应该是在加载 完成后还会再去计算,导致这个问题

这个我会再验证一下看看是否有其他的办法,然后给你回复
回复 使用道具 举报
信云软件
金牌服务用户   /  发表于:2022-3-10 14:52:00
3#
好的麻烦了
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-3-10 18:19:41
4#
不客气,问题比较麻烦,这边可能还需要找找解决办法,预计明天早上给你回复
回复 使用道具 举报
信云软件
金牌服务用户   /  发表于:2022-3-12 09:26:00
5#
咋样了,能否在加载数据的时候处理
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-3-14 10:29:11
6#
抱歉,这边一直未能重现问题,

我在自定义函数中加入了Thread.Sleep(2000);来延迟计算,

保存的xml中有好几个这个公式,但是最终也是会在计算完成后才跳出open方法,我建议你发我一个demo看看是否有做其他的设置导致这个问题,这个问题和数据库查询无关
回复 使用道具 举报
信云软件
金牌服务用户   /  发表于:2022-3-14 16:28:07
7#
this.fpSpread1.OpenExcel(Path);
MessageBox.Show("Test");
我没设置啥,就写了这个测试代码,弹窗先出来的,然后才把函数的值给加载出来,弹窗的代码是写在加载xml文件的后边,但是在OpenExcel的函数值还没加载结束的时候弹窗就出来了.......
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-3-14 18:13:07
8#
可能只能你这边做一个demo来重现问题了,

我这里目前使用了一个自定义 公式TAXVALUE测试,加了几个公式后保存为xlsx后,再加载无法重现问题

  1.     public class TaxValueFunction : GrapeCity.CalcEngine.Function
  2.     {
  3.         public TaxValueFunction() : base("TAXVALUE", 1, 2, FunctionAttributes.SingleCell | FunctionAttributes.Number) { }
  4.         protected override void Evaluate(IArguments arguments, IValue result)
  5.         {
  6.             IEvaluationContext context = arguments.EvaluationContext;
  7.             double num = arguments[0].GetNumber(context);
  8.             Thread.Sleep(2000);
  9.             double taxrate = arguments.Count > 1 ? arguments[1].GetNumber() : 0.15;
  10.             result.SetValue(null, num - (num * taxrate));
  11.         }
  12.     }
复制代码
回复 使用道具 举报
信云软件
金牌服务用户   /  发表于:2022-3-15 11:25:26
9#
咋发送demo给你,我在回复这里没看到有提交压缩吧的地方
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部