1

次のような英語以外の文字 (分音符号) を含むスプレッドシートまたはテーブルが MS Access にあるとします。à, á, â, ã, ä, å, æ, ç, è, é, ê, ë

このシステムは英語を話すユーザーによって使用されるため、値を検索する際に、特定の単語や名前が英語版で入力されたのかオリジナル版で入力されたのかを推測することはできません。

つまり、最初はまたはdíasとしてデータベースに入力された可能性があります。またはとして入力できます。実際、データはこの方法で入力されることもあれば、逆の方法で入力されることもあります。díasdiascoñaccoñacconac

問題は、この検索オプションを設定する方法があるかどうかです。そのため、組み込みのオフィス検索メカニズム (Ctrl+f) は、díasいつdias提供されたかを検出します。

そうでない場合は、この問題を解決するためのアプローチをお聞きしたいと思います。

4

1 に答える 1

1

OfficeアプリでのGUI検索ダイアログの一致する動作はカスタマイズできません。しかし、私があなたの立場にあった場合、これが私が問題を解決する方法です:

まず、アクセントに依存しない検索を実行する.NETコードが必要になります。どちらの言語が一番好きかによって、VBとC#の両方のサンプルがあります。この中核となるのはCompareInfo.IndexOf、CompareOptionsパラメータをに設定したメソッドを使用すること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 に答える