禁止在处理时编辑工作簿 (VSTO)
Disable editing a workbook while processing (VSTO)
我有一个 VSTO 插件,它对活动的 Excel 工作簿执行一些处理。处理过程可能需要几秒到几分钟,在此期间我想保持 Excel 对用户的响应,但我想阻止用户修改工作簿。处理完成后,工作簿应恢复为可编辑状态。
我可以将 application.Interactive
设置为 false
,但这会禁用与 Excel 的任何交互,而我不想这样做。我想让用户与当前工作簿、功能区和其他工作簿进行交互,只要这些交互不会对正在处理的工作簿产生任何影响。
有办法吗?基本上,如果工作簿对象上有一个可设置的IsReadonly
属性,那将是理想的。
最好的解决方案是显示一个对话框 window,在您的 calculations/operations 完成之前,它不会让用户切换到 Excel 工作簿。请注意,从辅助线程使用 Excel 对象模型并不安全,因为 Office 应用程序使用单线程单元模型。因此,提取数据、进行必要的修改然后将数据设置回主线程是有意义的。否则,您需要向用户显示模态进度 window 并在主线程上进行需求修改。
我有一个 VSTO 插件,它对活动的 Excel 工作簿执行一些处理。处理过程可能需要几秒到几分钟,在此期间我想保持 Excel 对用户的响应,但我想阻止用户修改工作簿。处理完成后,工作簿应恢复为可编辑状态。
我可以将 application.Interactive
设置为 false
,但这会禁用与 Excel 的任何交互,而我不想这样做。我想让用户与当前工作簿、功能区和其他工作簿进行交互,只要这些交互不会对正在处理的工作簿产生任何影响。
有办法吗?基本上,如果工作簿对象上有一个可设置的IsReadonly
属性,那将是理想的。
最好的解决方案是显示一个对话框 window,在您的 calculations/operations 完成之前,它不会让用户切换到 Excel 工作簿。请注意,从辅助线程使用 Excel 对象模型并不安全,因为 Office 应用程序使用单线程单元模型。因此,提取数据、进行必要的修改然后将数据设置回主线程是有意义的。否则,您需要向用户显示模态进度 window 并在主线程上进行需求修改。