【问题标题】:Excel Range.Find and maintaining user selected find optionsExcel Range.Find 和维护用户选择的查找选项
【发布时间】:2012-04-24 18:32:10
【问题描述】:

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

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

我基本上是在寻找 LookIn、LookAt、SearchOrder、SearchDirection 和 MatchCase 的当前查找选项值。

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

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

【问题讨论】:

  • 我在这里找到了一个类似的帖子,但并没有解决问题:mrexcel.com/forum/showthread.php?t=520336,虽然提出了编写自己的 find 方法的想法(我不想这样做)。
  • 我不确定,但我不认为它像你提到的那样是公开的。也许您可以创建一个名为 FindOptions 的类并根据用户的输入设置变量。然后,每次他们进行新搜索时,您都可以创建 FindOptions 的实例,设置选项,并将其放入“查找”堆栈中,以便您可以恢复到任何以前的搜索条件。这样的事情是不可能的吗?
  • 我明白你在说什么,但问题在于找到当前值。我可以创建一个 FindOptions 类来保存这些值,但是,我需要从某个地方设置这些值。我需要找到可以访问当前查找选项值的位置。你将如何设置 FindOptions 类中的属性是我所得到的......?
  • 您是指创建一个查找选项表单,用户可以在其中设置默认值吗?
  • 如果我理解正确,您的用户应该已经通过使用 Excel 的查找对话框并设置了一些选项来设置查找选项,对吧?你想获得这些设置吗?嗯......我真的不认为这是可能的。我唯一知道您可以获得这些设置的方法是通过 Application.FindFormat 对象通过特殊查找(例如查找具有某些颜色、格式等的单元格)...但这并不能满足您的需要,很遗憾。

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


【解决方案1】:

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

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

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

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

您不能在非托管应用程序中使用应用程序设置 承载 .NET 框架。设置在此类环境中不起作用 作为 Visual Studio 加载项、用于 Microsoft Office 的 C++、控制托管 Internet Explorer 或 Microsoft Outlook 加载项和项目。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多