Есть ли способ настроить параметры поиска для MS Office (2003) для неанглийских символов?
-
21-09-2019 - |
Вопрос
Допустим, в MS Access есть электронная таблица или таблица, содержащая неанглийские символы (диакритические знаки), такие как à, á, â, ã, ä, å, æ, ç, è, é, ê, ë
Поскольку эту систему используют англоговорящие люди, конечный пользователь при поиске значений не может угадать, были ли введены определенные слова или имена в английской версии или в исходной версии.
То есть, días
может быть первоначально введено в базу данных как días
или dias
. coñac
может быть введено как coñac
или conac
.На самом деле иногда данные вводятся таким способом, а иногда другим.
Вопрос в том, есть ли способ настроить эти параметры поиска, чтобы встроенный механизм поиска офиса (Ctrl+f) находил días
когда dias
в комплект поставки.
Если нет, я хотел бы услышать, каков будет ваш подход к решению этой проблемы.
Решение
Соответствующее поведение диалогового окна поиска графического пользовательского интерфейса в приложениях Office не настраивается.Но если бы я был на вашем месте, вот как бы я решил проблему:
Во-первых, вам понадобится код .NET, который выполняет поиск без учета акцентов.В зависимости от того, какой язык вам больше нравится, вот пример VB и C#.Суть этого заключается в использовании CompareInfo.IndexOf
метод с использованием параметра CompareOptions, для которого установлено значение CompareOptions.IgnoreNonSpace
.Это поиск без учета акцента.
Далее вам нужно будет вызвать этот код из приложения Office.Способ подключения кода зависит от приложения. Например, вот сообщения в блоге, показывающие, как это сделать из Эксель и Доступ.
Затем вам нужно будет обернуть эти вызовы вокруг кода и пользовательского интерфейса, который имитирует поиск и замену.Это снова будет отличаться в каждом приложении.Например, в Excel вы просматриваете все ячейки текущего листа и ищете совпадения с помощью своего кода.
Наконец, вы захотите сопоставить этот код с кнопкой панели инструментов или другим способом вызова вашего кода.
В любом случае, надеюсь, этой информации достаточно, чтобы помочь вам начать работу.Вот основной код .NET на VB или C# для сопоставления без учета акцентов:
ВБ
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
С#
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);
}
}