다음을 통해 공유


방법: 리플렉션을 사용하여 Excel의 문자열 리터럴 영역 안전하게 만들기

업데이트: 2007년 11월

적용 대상

이 항목의 정보는 지정된 Visual Studio Tools for Office 프로젝트 및 Microsoft Office 버전에만 적용됩니다.

프로젝트 형식

  • 문서 수준 프로젝트

Microsoft Office 버전

  • Excel 2003

  • Excel 2007

자세한 내용은 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

기본 Visual Studio Tools for Office 설정을 사용할 때 항상 로캘 구분 데이터 문자열을 영어(미국)로 서식 지정하면 Excel은 올바르게 서식이 지정된 데이터를 자동으로 표시합니다. ExcelLocale1033Attribute를 false로 설정하여 기본값을 변경하고 문자열 리터럴을 Excel로 전달하는 경우 스레드의 현재 LCID가 자동으로 사용되므로 데이터가 올바르지 않게 서식이 지정될 수 있습니다. 자세한 내용은 여러 가지 국가별 설정으로 Excel의 데이터 서식 지정을 참조하십시오.

ExcelLocale1033Attribute를 false로 설정하는 경우 리플렉션을 사용하여 속성을 설정하거나 가져오고 영어(미국)의 CultureInfo를 전달하여 대상 범위의 메서드를 호출하면 모든 문자열의 영어 이름을 사용하여 모든 로캘에서 제대로 작동하게 할 수 있습니다.

리플렉션을 사용하여 Excel 범위에서 속성을 설정하려면

  1. 문자열 리터럴을 전달함으로써 Excel 범위의 속성 값을 설정할 때마다 영어(미국)에 대한 LCID를 전달하도록 하기 위해 SetPropertyInternational이라는 도우미 함수를 만듭니다.

    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 함수를 호출합니다.

    참고:

    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. GetPropertyInternational 함수를 호출하고 NamedRange 및 속성 이름을 전달합니다.

    참고:

    다음 코드 예제에서는 워크시트에 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 다국어 사용자 인터페이스 대상 선택

개념

여러 가지 국가별 설정으로 Excel의 데이터 서식 지정

Office 솔루션 전역화 및 지역화

Visual Studio에서 Office 솔루션 만들기

기타 리소스

Office 솔루션 배포