在Excel中使用剪贴板复制粘贴(VSTO代码)可冻结其他Microsoft Office应用程序

本文关键字:代码 冻结 其他 应用程序 Office Microsoft VSTO Excel 剪贴板 复制 | 更新日期: 2023-09-27 18:29:14

操作系统:Microsoft Windows SP1(64位)

Office套件:Microsoft Office 2010

.Net框架:4.0

主题:当excel插件代码运行时,Microsoft应用程序套件(Word、Outlook)在时间段内没有响应

详细信息:我们已经为excel应用程序编写了基于VSTO(C#)的插件。此加载项用于刷新当前工作表中的数据。

点击"刷新"按钮会发生以下事件步骤

•通过传递一些元数据来下载文件,从而调用内部web服务

•文件已下载并存储在windows Temp文件夹中。

•执行VSTO代码,使用剪贴板复制/粘贴将数据从下载的工作表复制到当前工作表。数据是逐行复制的。

在任何时间点,剪贴板中都会有一行数据。行和列的数量也因请求而异。

问题:虽然刷新功能按预期工作,但我们遇到了其他Office套件应用程序(Word、Outlook)的问题。

由于时间片刷新正在运行,所有Office应用程序套件都将停止响应。

有人能帮上忙吗?

在Excel中使用剪贴板复制粘贴(VSTO代码)可冻结其他Microsoft Office应用程序

我认为您无法控制其他办公套件应用程序。但你可以做的是,尝试减少刷新按钮的时间片通过使用不同的概念,如

•通过将一些元数据传递给下载文件

•文件已下载并存储在windows Temp文件夹中。

对于以上两点,我不知道你们是否使用了单独的线程?如果不使用单独的线程。

在将数据从一张图纸复制粘贴到另一张图纸时,也可以使用一些优化技巧。

以下是一些优化vba/vsto代码的技巧

http://tchhabhaiya.blogspot.in/2012/06/17-ways-to-optimize-vba-code-for-faster.html

我认为如果你还没有使用过这个,下面的代码会对你有很大帮助。

Application.ScreenUpdating = False //To Turn Off at the start of code.
Application.ScreenUpdating = True //To Turn on at the end of the code.