开发者

Is there a way to set search settings for ms office (2003) for non English charectars

Say there is a spreadsheet or table in MS access which contains non English characters (diacritics) such as à, á, â, ã, ä, å, æ, ç, è, é, ê, ë

Since this system is used by English speakers, the end-user, when searching for values cannot guess whether or not certain words or names were entered in the English version or in the original version.

That is, días might be originally entered into the databse as días or dias. coñac might be entered as coñac or conac. In fact sometimes data is entered this way and sometimes the other way.

The question is whether there is a way to set this search options, so built-in office search mechanism (Ctrl+f) would find días when dias is supplied.

If there is not, I would like to hear what would be your approach to sol开发者_如何学运维ve this problem.


GUI search dialog's matching behavior in Office apps is not customizable. But if I were in your shoes, here's how I'd solve the problem:

First, you'll need some .NET code which performs accent-insensitive searches. Depending on which language you like best, here's both a VB and C# sample. The core of this is using the CompareInfo.IndexOf method using a CompareOptions parameter set to CompareOptions.IgnoreNonSpace. This is an accent-insensitive search.

Next, you'll need to call this code from the Office app. How you plug code in varies by app-- for example, here are blog posts showing how to do this from Excel and Access.

Then you'll need to wrap those calls around code and UI which simulates a search and replace. This again will be different in each app. For example, in Excel you'll loop through all cells in the current worksheet and look for matches using your code.

Finally, you'd want to map that code to a toolbar button or other way to get your code invoked.

Anyway, hope this is enough info to help you get started. Here's the core .NET code in either VB or C# to do accent-insensitive matches:

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);
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜