1

假设 MS 访问中有一个电子表格或表格,其中包含非英文字符(变音符号),例如à, á, â, ã, ä, å, æ, ç, è, é, ê, ë

由于该系统由讲英语的人使用,因此最终用户在搜索值时无法猜测某些单词或名称是在英文版本中还是在原始版本中输入的。

也就是说,días最初可能以días或输入到数据库中diascoñac可以输入为coñacconac。事实上,有时以这种方式输入数据,有时以另一种方式输入数据。

问题是是否有办法设置这个搜索选项,所以内置的办公室搜索机制(Ctrl+f)会在提供días时找到dias

如果没有,我想听听您解决此问题的方法。

4

1 回答 1

1

Office 应用程序中的 GUI 搜索对话框的匹配行为不可自定义。但如果我站在你的立场上,我会这样解决问题:

首先,您需要一些执行不区分重音搜索的 .NET 代码。根据您最喜欢哪种语言,这里有一个 VB 和 C# 示例。其核心是使用将CompareInfo.IndexOfCompareOptions 参数设置为 的方法CompareOptions.IgnoreNonSpace。这是一个不区分重音的搜索。

接下来,您需要从 Office 应用调用此代码。插入代码的方式因应用程序而异——例如,这里的博客文章展示了如何从ExcelAccess执行此操作。

然后,您需要将这些调用包装在模拟搜索和替换的代码和 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);
    }
}
于 2009-11-25T19:34:01.073 回答