Office 应用程序中的 GUI 搜索对话框的匹配行为不可自定义。但如果我站在你的立场上,我会这样解决问题:
首先,您需要一些执行不区分重音搜索的 .NET 代码。根据您最喜欢哪种语言,这里有一个 VB 和 C# 示例。其核心是使用将CompareInfo.IndexOf
CompareOptions 参数设置为 的方法CompareOptions.IgnoreNonSpace
。这是一个不区分重音的搜索。
接下来,您需要从 Office 应用调用此代码。插入代码的方式因应用程序而异——例如,这里的博客文章展示了如何从Excel和Access执行此操作。
然后,您需要将这些调用包装在模拟搜索和替换的代码和 UI 中。这在每个应用程序中都会有所不同。例如,在 Excel 中,您将遍历当前工作表中的所有单元格并使用您的代码查找匹配项。
最后,您希望将该代码映射到工具栏按钮或其他方式以调用您的代码。
无论如何,希望这是足够的信息来帮助您入门。这是在 VB 或 C# 中进行不区分重音匹配的核心 .NET 代码:
VB
Module Module1
Sub Main()
' returns: 3
Dim pos As Integer = FindIgnoreDiacritics("àcçëñt-énäblêd", "en")
End Sub
Function FindIgnoreDiacritics(ByVal lookIn As String, ByVal lookFor As String) As Integer
FindIgnoreDiacritics = System.Globalization.CultureInfo.InvariantCulture.CompareInfo.IndexOf(lookIn, lookFor, System.Globalization.CompareOptions.IgnoreNonSpace Or System.Globalization.CompareOptions.IgnoreCase)
End Function
End Module
C#
class Program
{
static void Main(string[] args)
{
// returns: 3
int pos = FindIgnoreDiacritics("àcçëñt-énäblêd", "en");
}
static int FindIgnoreDiacritics(string lookIn, string lookFor)
{
return System.Globalization.CultureInfo.InvariantCulture.CompareInfo.IndexOf(lookIn, lookFor,
System.Globalization.CompareOptions.IgnoreNonSpace | System.Globalization.CompareOptions.IgnoreCase);
}
}