方法 : リフレクションを使用して Excel 内のリテラル文字列を領域保護する

更新 : 2007 年 11 月

対象

このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。

プロジェクトの種類

  • ドキュメント レベルのプロジェクト

Microsoft Office のバージョン

  • Excel 2003

  • Excel 2007

詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

Visual Studio Tools for Office の既定の設定を使用すると、ロケールに依存するデータ文字列が常に英語 (U.S.) として書式設定され、Excel は正しく書式設定されたデータを自動的に表示します。ExcelLocale1033Attribute を false に設定して既定の設定を変更し、Excel にリテラル文字列を渡すと、スレッドの現在の LCID が自動的に使用され、データの書式が正しく設定されないことがあります。詳細については、「さまざまな地域設定を使用した Excel のデータの書式設定」を参照してください。

ExcelLocale1033Attribute を false に設定すると、リフレクションを使用して、英語 (U.S.) の CultureInfo を渡して、プロパティを設定または取得したり、対象範囲でメソッドを呼び出したりできます。このため、すべての文字列に英語名を使用でき、すべてのロケールで正しく動作します。

リフレクションを使用して Excel の範囲内のプロパティを設定するには

  1. SetPropertyInternational というヘルパー関数を作成します。この関数は、リテラル文字列を渡して Excel の範囲のプロパティ値を設定する場合に必ず英語 (U.S.) の LCID を渡します。

    Shared Function SetPropertyInternational( _
        ByVal target As Object, ByVal name As String, _
        ByVal ParamArray parameters() As Object) As Object
    
        Return target.GetType.InvokeMember(name, _
            Reflection.BindingFlags.Instance Or Reflection.BindingFlags.SetProperty, _
            Nothing, target, parameters, _
            System.Globalization.CultureInfo.GetCultureInfo(1033))
    End Function
    
    static object SetPropertyInternational(object target, string name, params object[] args)
    {
        return target.GetType().InvokeMember(name,
            System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.SetProperty |
            System.Reflection.BindingFlags.Public,
            null, target, args, new
            System.Globalization.CultureInfo(1033));
    }
    
  2. セル A5 に NamedRange コントロールを作成し、NamedRange1 という名前を付けます。

    Dim NamedRange1 As Microsoft.Office.Tools.Excel.NamedRange = _
        Me.Controls.AddNamedRange(Me.Range("A5"), "NamedRange1")
    
    Microsoft.Office.Tools.Excel.NamedRange NamedRange1 =
        this.Controls.AddNamedRange(this.Range["A5", missing], "NamedRange1");
    
  3. NamedRange1 の Formula プロパティを直接設定する代わりに、NamedRange、プロパティ名、および値を渡して SetPropertyInternational 関数を呼び出します。

    ms178761.alert_note(ja-jp,VS.90).gifメモ :

    NamedRange コントロールを直接渡すことはできないので、InnerObject メソッドを呼び出して基になる Range オブジェクトを渡す必要があります。詳細については、「ホスト項目およびホスト コントロールのプログラム上の制限事項」を参照してください。

    SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)")
    
    SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)");
    

リフレクションを使用して Excel の範囲内のプロパティ値を取得するには

  1. GetPropertyInternational という関数を作成し、Excel の範囲のプロパティ値を取得するたびに LCID を設定するようにします。

    Shared Function GetPropertyInternational( _
        ByVal target As Object, ByVal name As String, _
        ByVal ParamArray parameters() As Object) As Object
    
        Return target.GetType.InvokeMember(name, _
            Reflection.BindingFlags.Instance Or Reflection.BindingFlags.GetProperty, _
            Nothing, target, parameters, _
            System.Globalization.CultureInfo.GetCultureInfo(1033))
    End Function
    
    static object GetPropertyInternational(object target, string name, params object[] args)
    {
        return target.GetType().InvokeMember(name,
            System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty |
            System.Reflection.BindingFlags.Public,
            null, target, args, new 
            System.Globalization.CultureInfo(1033));
    }
    
  2. NamedRange およびプロパティ名を渡して GetPropertyInternational 関数を呼び出します。

    ms178761.alert_note(ja-jp,VS.90).gifメモ :

    以下のコード例は、ワークシートに NamedRange1 という名前の NamedRange コントロールがあることを前提としています。

    Dim formula As String = CType( _
        GetPropertyInternational(NamedRange1.InnerObject, "Formula"), String)
    
    MessageBox.Show(formula)
    
    string formula = (string)
        GetPropertyInternational(NamedRange1.InnerObject, "Formula");
    
    MessageBox.Show(formula);
    

参照

処理手順

方法 : Office Multilingual User Interface を使用する

概念

さまざまな地域設定を使用した Excel のデータの書式設定

Office ソリューションのグローバリゼーションとローカリゼーション

Visual Studio における Office ソリューションの作成

その他の技術情報

Office ソリューションの配置