如何将操作推送到Excel撤消堆栈?

Ric*_*nka 9 c# excel vsto

我正在构建一个VSTO Excel加载项,用于处理多个单元格的值.我想允许用户通过标准Excel功能撤消和重做加载项创建的更改.我宁愿避免使用VBA.

这可能吗?如果是这样,怎么样?

另一个问题:是否有可能检查现有的撤消/重做堆栈?

mou*_*sio 5

您没有提到要使用哪个版本的Excel / .NET / VSTO运行时,但这并不重要:]
自定义撤消只是在不注入VBA的情况下才能完成,您需要在其中设置撤消方法来回滚您的通过使用补偿(即反向操作)或通过恢复保存的状态来执行操作。


Ric*_*nka -1

我实际采用的解决方案如下:

  • 保存剪贴板状态的副本
  • 清除剪贴板
  • 以制表符/换行符分隔格式生成我想要的数据,将其推送到剪贴板
  • 模拟 Excel 的 Ctrl+V 操作
  • 清除剪贴板
  • 恢复原始剪贴板状态

显然,这是本地化的单元格操作,因此您不能将任意操作/回调推送到撤消堆栈。另外,我显然违反了 Windows 中剪贴板使用的原则,但如果微软为此类事情公开了更好的 API(提示),我就不必这样做。

此外,我没有采用我在 David Zemens 的答案的第一条评论中描述的解决方案,因为我在我们的环境中遇到了一些安全违规(即,将 VBA 代码注入工作簿是禁忌)。

不管怎样,谢谢大家!