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

Posted

技术标签:

【中文标题】在 Excel(VSTO 代码)中使用剪贴板复制粘贴会冻结其他 Microsoft Office 应用程序【英文标题】:Using Clipboard Copy Paste in Excel (VSTO code) freezes other Microsoft Office application 【发布时间】:2013-08-28 11:04:19 【问题描述】:

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

办公套件:Microsoft Office 2010

.Net 框架:4.0

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

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

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

•通过传递一些元数据以下载文件来调用内部 Web 服务

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

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

在任何时候,剪贴板中都会有一行数据。此外,行数和列数因请求而异。

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

对于运行时间片刷新,所有 Office 应用程序套件停止响应。

有人可以帮助解决这个问题吗?

【问题讨论】:

【参考方案1】:

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

•通过将一些元数据传递给内部 Web 服务来调用 下载文件

•文件已下载并存储在 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.

【讨论】:

感谢您的意见。是的,我们对以下步骤有单独的线程: •通过传递一些元数据来下载文件来调用内部 Web 服务 •文件被下载并存储在 Windows Temp 文件夹中。我还在更新 excel 表之前使用了 Application.ScreenUpdating = False。

以上是关于在 Excel(VSTO 代码)中使用剪贴板复制粘贴会冻结其他 Microsoft Office 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何将 RTF 文本复制到剪贴板以在 excel 中使用

vscode怎样用鼠标拖动复制粘

有没有办法以编程方式将 Excel 单元格保存到可以加载的本地文件,就像使用 VSTO 的“复制和粘贴”一样?

在工作簿关闭的Excel VBA中禁用剪贴板提示

Ditto - Windows剪贴板增强小工具,方便复制粘贴多条记录

按键精灵如何把复制的数据写入到excel指定单元格中