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

3
使用Excel Interop API自动化excel时,可以轻松使用Range.Find方法进行范围搜索。我正在通过LookIn、LookAt、SearchOrder、SearchDirection和MatchCase选项传递Find参数。根据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
我在这里找到了一个类似的帖子,但并没有解决问题:http://www.mrexcel.com/forum/showthread.php?t=520336,虽然提出了编写自己的查找方法的想法(但我不想这样做)。 - mservidio
1
我不确定,但我认为它并不像你所说的那样是公开的。也许你可以创建一个名为FindOptions的类,并根据用户的输入设置变量。然后每次他们进行新搜索时,您可以创建一个FindOptions实例,设置选项,并将其放入“Finds”堆栈中,以便您可以恢复到任何先前的搜索条件。这种做法是否可行? - Joseph
我明白你的意思,但问题在于找到当前值。我可以创建一个 FindOptions 类来保存这些值,但是,我需要从某个地方设置这些值。我需要找到可以访问当前查找选项值的位置。你会如何设置 FindOptions 类中的属性呢? - mservidio
我也是,我正在谷歌搜索,看看是否有其他方法可以访问这些属性。它们必须以某种方式被持久化,但不会通过此API公开。 - mservidio
尽管设置可能会被持久化,但微软不必通过API公开它,这就是为什么如果他们不这样做,你可能永远找不到它的原因。 - Joseph
显示剩余5条评论
1个回答

0

嗯,我不确定你是否会考虑这种方法,但我会在这里尝试一下,以防它可能有所帮助。

我会创建一个包含要持久化的值的注册表键。然后,我可以调用RegistryKey.GetValue(valuename)来检索值,前提是没有抛出任何异常。

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

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

您无法在托管.NET Framework的非托管应用程序中使用应用程序设置。在此类环境中,设置将无法工作,例如Visual Studio插件、Microsoft Office的C++、Internet Explorer中的控件托管或Microsoft Outlook插件和项目。

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接