Excel Range.Find并维护用户选择的查找选项

时间:2012-04-24 18:32:11

标签: visual-studio-2010 excel vsto excel-interop

使用Excel Interop API自动化Excel时,我可以使用Range.Find方法轻松进行范围搜索。我正在通过查找的LookIn,LookAt,SearchOrder,SearchDirection和MatchCase选项。如MSDN文档所述,将传递给此方法的值保留在用户设置中,因此下次用户打开查找表单时,将选择我在Range.Find方法中使用的选项。

我需要在执行程序化查找之前和之后保持查找选项的值。所以我想捕获当前的查找选项,然后执行Range.Find,然后将查找选项设置回我搜索之前设置的选项。但是,我没有看到查找选项可公开访问。关于如何获得这些的任何想法?

我基本上希望检索LookIn,LookAt,SearchOrder,SearchDirection和MatchCase的当前查找选项值。

更新 到目前为止我能找到的最有趣的事情是你可以访问Excel应用程序对话框 - Dialogs Interface。所以在这里,我可以访问FormulaFind对话框,它与“查找和替换”对话框略有不同,但可能会导致我正在寻找的一些属性。我没有运气,但也许有办法通过这种形式使用反射访问属性。我会继续尝试这个。

// xlDialogFormulaFind, xlDialogFormulaReplace
Excel.Dialog dialog = this.Application.Dialogs.Item[Excel.XlBuiltInDialog.xlDialogFormulaFind];

1 个答案:

答案 0 :(得分:0)

好吧,我不确定你是否考虑过这种方法,但我会在这里给出一个镜头以防它可能有用。

我要做的是,我会创建一个包含您想要保留的值的注册表项。然后,我可以调用RegistryKey.GetValue(valuename)来检索值,前提是没有抛出异常。

只要该注册表项保持不变,并且您有足够的权限访问注册表项,您就应该能够始终获得相同的值。

希望我们真的可以在这里使用应用程序设置,这会让它变得更容易,但是,正如您可能已经知道的那样,vsto加载项不喜欢它,根据this article

  

您无法在非托管应用程序中使用应用程序设置   托管.NET Framework。设置无法在此类环境中使用   作为Visual Studio加载项,C ++ for Microsoft Office,控制托管   Internet Explorer或Microsoft Outlook加载项和项目。

希望这会有所帮助。