2012-04-24 57 views
3

使用Excel Interop API自动执行excel时,我可以使用方法Range.Find轻松执行范围搜索。我正在通过查找的LookIn,LookAt,SearchOrder,SearchDirection和MatchCase选项。如MSDN文档所述,将传入此方法的值保留到用户设置中,所以下次用户打开查找表单时,将会选择在Range.Find方法中使用的选项。Excel 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

我在这里发现了一个类似的线程,它不能解决这个问题:http://www.mrexcel.com/forum/showthread.php?t=520336,虽然提出了编写自己的find方法的想法我宁愿不这样做)。 – mservidio 2012-04-24 18:34:13

+1

我并不确定,但我认为它不像您提到的那样是公开的。也许你可以创建一个名为FindOptions的类并根据用户的输入设置变量。然后,每次他们进行新搜索时,您都可以创建一个FindOptions实例,设置选项并将其放入一堆“查找”中,以便恢复到之前的任何搜索条件。是不是这样的问题? – 2012-04-24 20:11:42

+0

我看到你在说什么,但问题在于找到当前值。我可以创建一个FindOptions类来保存这些值,但是,我需要从某处设置这些值。我需要找到我可以访问当前查找选项值的位置。你将如何设置FindOptions类中的属性就是我在...? – mservidio 2012-04-24 20:21:39

回答

0

嗯,我不知道你是否会考虑这种方法,但我会在这里给一个镜头,以防万一它可能有帮助。

我会做的是,我会创建一个注册表键,保存您想要坚持的值。如果没有抛出异常,我可以调用RegistryKey.GetValue(valuename)来检索值。

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

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

您不能在托管.NET Framework的非托管应用程序中使用应用程序设置。在Visual Studio加载项,Microsoft Office的C++, Internet Explorer或Microsoft Outlook加载项和项目的控制托管等环境中,设置将不起作用 。

希望这会有所帮助。