C# vsto Excel开发时, 在新添加的按钮响应中修改了表格内容, 就不能够进行撤销和重做了, 这是为什么?
开发一个Excel的插件,添加了几个按钮实现功能.按钮点击之后,我编写的代码对表格修改完成,之前操作的就不能再撤销回去了,就好像操作记录被清空了一样.怎么让我代码的操作不...
开发一个Excel的插件, 添加了几个按钮实现功能. 按钮点击之后, 我编写的代码对表格修改完成, 之前操作的就不能再撤销回去了, 就好像操作记录被清空了一样. 怎么让我代码的操作不影响office自带的撤销功能?
展开
展开全部
应该是不行的,你这些vsto或者vba进行操作的时候,其实就是后台对EXCEL文件本身进行了修改。 而撤销这个操作实际是建立在用户操作上的。
也就是说,原生的撤销功能,实际是从EXCEL打开开始监视用户的输入以及EXCEL的输出,
记录下每一步操作(如果你显示隐藏文件的话,在.XLSX文件旁边,会看到有一个临时文件的生成),当你Ctrl+Z的时候,就回滚上一步的操作。
但是使用VBA或者VSTO的时候,由于是代码在执行,所以EXCEL是不记录每一步的操作内容的,
如果仍需要这个功能,可以把撤销功能也重写一下,
思路很简单,监视每一步用户的输入(原生撤销)
并记录你VSTO按键的操作功能,逆向运行,
这样就可以将你代码执行的操作进行还原了。
也就是说,原生的撤销功能,实际是从EXCEL打开开始监视用户的输入以及EXCEL的输出,
记录下每一步操作(如果你显示隐藏文件的话,在.XLSX文件旁边,会看到有一个临时文件的生成),当你Ctrl+Z的时候,就回滚上一步的操作。
但是使用VBA或者VSTO的时候,由于是代码在执行,所以EXCEL是不记录每一步的操作内容的,
如果仍需要这个功能,可以把撤销功能也重写一下,
思路很简单,监视每一步用户的输入(原生撤销)
并记录你VSTO按键的操作功能,逆向运行,
这样就可以将你代码执行的操作进行还原了。
追问
其实我不需要撤销我的操作, 只要撤销的时候可以撤销到原生的操作就行了.
例如, 在表格中将 "1" 修改成 "2" , 点击我的按钮之后, 修改为 "3". 此时撤销失效了, 不能从现状态撤销到 "1" 了
我如果想按照您的说法进行监听 , 能不能从现状态撤销到 "1"或者 "2" ? 如果可以的话, 怎样进行监听呢?
追答
VSTO我用的比较少,原来开发过VBA,两者应该是非常类似的。
如我上面所说,原生的撤销其实是监视用户的每一步输入,然后记录下步数。
你只需要模仿这个撤销即可。 也就是说,用户只需要使用你开发好的撤销功能,而不需要去关注原生的撤销。
VSTO中如何监视用户输入你可以查看一下文档,我是实在不清楚新的技术如何实现,
我原来一般使用钩子来记录的,
建议参考http://www.cnblogs.com/SanMaoSpace/archive/2013/02/20/2919337.html
这篇文章。
因为用户每一次点击或者键盘输入都会被钩子捕捉,每一次捕捉的时候,记录一下当前文件的状态,比如“1”“2”, 然后临时存储到文件中, 当用户发起撤销时,逆向还原文件即可。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询