安排在Excel加载项中运行的函数

时间:2014-02-14 21:58:12

标签: c# excel scheduled-tasks add-in

我有一个用C#编写的Excel加载项。在插件中,一个功能区按钮为“刷新”,单击该按钮时,将从服务器获取数据并在Excel中绘制。 客户希望每天在特定时间或每隔几小时自动刷新数据。 他们可以写VBA代码来做到这一点,但他们不想这样做。 我们正在考虑在AddIn中添加该功能,因此客户端没有写入VBA代码来完成自动刷新。我在想一个计时器,但不知道该怎么做。 请帮助,谢谢

2 个答案:

答案 0 :(得分:1)

  

他们可以编写VBA代码来执行此操作,但他们不想这样做。

是的,Excel不处理原生AFAIK的调度。

您可能可以在C#中编写任务调度程序,但如果客户端不想编写代码,我不会发现这会带来任何好处。

但为什么这么麻烦,已经完成了:http://windows.microsoft.com/en-US/windows/schedule-task#1TC=windows-7

现在你已经离开了煎锅,但是在火中:如果Windows任务调度程序的目标是Excel工作簿本身,并且用户当前打开了文件,那么就会出现许多令人讨厌的问题。 / p>

您需要的是任务调度程序,以定位其他文件,并在用户的Excel文件中运行事件监听器。这可能意味着编写VBA代码。

你可能会陷入困境。

[编辑]

试试这个:http://www.mrexcel.com/forum/excel-questions/528653-visual-basic-applications-file-watcher-possible.html

答案 1 :(得分:0)

如果您已经在c#中编写了一个插件,那么自动刷新应该很简单。

您可以在加载加载的位置启动一个线程,这将在触发刷新逻辑之前等待一段给定的时间。如果这样做,您需要确保在卸载插件时(当excel退出时)再次清理线程。不要使用Thread.Sleep(myRefreshTime)让它在刷新之间等待,因为如果你每2小时刷新一次,线程将挂起2小时,这使得线程的处理变得困难。我建议使用wait handle来控制线程,并确保在需要处理时及时退出。使其触发特定时间也应该足够简单。您可以在加载插件时检查DateTime.Now()是什么,并计算myRefreshTime的值与固定时间的比较。