假设MS访问中有一个电子表格或表格,其中包含非英文字符(变音符号),例如à, á, â, ã, ä, å, æ, ç, è, é, ê, ë
由于该系统由英语使用者使用,因此最终用户在搜索值时无法猜测是否在英语版本或原始版本中输入了某些单词或名称。
也就是说,días
最初可能会以días
或dias
的形式输入数据库。 coñac
可能会输入coñac
或conac
。事实上,有时数据是以这种方式输入的,有时是另一种方式。
问题是是否有办法设置此搜索选项,因此当提供días
时,内置办公室搜索机制(Ctrl + f)会找到dias
。
如果没有,我想听听你解决这个问题的方法。
答案 0 :(得分:1)
GUI搜索对话框在Office应用程序中的匹配行为无法自定义。但如果我在你的鞋子里,我就是这样解决问题的方法:
首先,您需要一些执行重音不敏感搜索的.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);
}
}