我有一个用C#编写的Excel加载项。在插件中,一个功能区按钮为“刷新”,单击该按钮时,将从服务器获取数据并在Excel中绘制。 客户希望每天在特定时间或每隔几小时自动刷新数据。 他们可以写VBA代码来做到这一点,但他们不想这样做。 我们正在考虑在AddIn中添加该功能,因此客户端没有写入VBA代码来完成自动刷新。我在想一个计时器,但不知道该怎么做。 请帮助,谢谢
答案 0 :(得分:1)
他们可以编写VBA代码来执行此操作,但他们不想这样做。
是的,Excel不处理原生AFAIK的调度。
您可能可以在C#中编写任务调度程序,但如果客户端不想编写代码,我不会发现这会带来任何好处。
但为什么这么麻烦,已经完成了:http://windows.microsoft.com/en-US/windows/schedule-task#1TC=windows-7
现在你已经离开了煎锅,但是在火中:如果Windows任务调度程序的目标是Excel工作簿本身,并且用户当前打开了文件,那么就会出现许多令人讨厌的问题。 / p>
您需要的是任务调度程序,以定位其他文件,并在用户的Excel文件中运行事件监听器。这可能意味着编写VBA代码。
你可能会陷入困境。
[编辑]
答案 1 :(得分:0)
如果您已经在c#中编写了一个插件,那么自动刷新应该很简单。
您可以在加载加载的位置启动一个线程,这将在触发刷新逻辑之前等待一段给定的时间。如果这样做,您需要确保在卸载插件时(当excel退出时)再次清理线程。不要使用Thread.Sleep(myRefreshTime)让它在刷新之间等待,因为如果你每2小时刷新一次,线程将挂起2小时,这使得线程的处理变得困难。我建议使用wait handle来控制线程,并确保在需要处理时及时退出。使其触发特定时间也应该足够简单。您可以在加载插件时检查DateTime.Now()是什么,并计算myRefreshTime的值与固定时间的比较。