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

Office 프로젝트에서 문자열의 서식을 영어(미국)로 지정하면 Excel은 로캘 구분 데이터 문자열을 올바르게 표시합니다. .NET Framework 3.5를 대상으로 하는 Office 프로젝트에서 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute를 false로 설정하여 이 동작을 변경할 수 있습니다. 그러나 이 특성을 변경한 후 문자열 리터럴을 Excel로 전달하는 경우 스레드의 현재 LCID가 자동으로 사용되므로 데이터의 서식이 올바르지 않게 지정될 수 있습니다. 자세한 내용은 여러 가지 국가별 설정으로 Excel의 데이터 서식 지정를 참조하십시오.

적용 대상: 이 항목의 정보는 Excel 2007 및 Excel 2010의 문서 수준 프로젝트 및 응용 프로그램 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

.NET Framework 3.5를 대상으로 하는 Office 프로젝트에서 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute를 false로 설정하는 경우 리플렉션을 사용하여 Excel 개체의 속성 및 메서드에 대한 특정 호출에서 영어(미국) 데이터 형식(로캘 ID 1033)을 사용하도록 할 수 있습니다. 이렇게 하는 경우 속성이나 메서드에 전달되는 모든 문자열에 영어(미국) 형식을 사용할 수 있으며 코드가 모든 로캘에서 제대로 작동합니다.

다음 예제에서는 문서 수준 Excel 프로젝트에서 NamedRange 컨트롤의 속성을 설정하거나 가져오는 방법을 보여 줍니다. 동일한 개념이 응용 프로그램 수준 프로젝트의 Excel 개체에도 적용됩니다.

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

  1. InvokeMember 메서드를 사용하여 Excel 개체의 속성 값을 설정하는 도우미 메서드를 만듭니다. Excel 개체의 매개 변수, 속성 이름 및 속성의 매개 변수를 포함합니다. 도우미 메서드에서 CultureInfo 매개 변수가 있는 InvokeMember 오버로드를 사용하고 영어(미국)의 로캘 ID를 이 매개 변수에 전달합니다.

    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 속성을 직접 설정하는 대신 SetPropertyInternational 도우미 메서드를 호출하고 NamedRange 컨트롤의 기본 Range 개체, 속성 이름 및 값을 전달합니다.

    참고

    NamedRange 컨트롤을 직접 전달할 수는 없습니다. 대신 InnerObject 속성을 사용하여 기본 Excel Range 개체를 가져온 다음 이 개체를 메서드에 전달해야 합니다. 자세한 내용은 호스트 항목 및 호스트 컨트롤의 프로그래밍에 대한 제한 사항을 참조하십시오.

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

리플렉션을 사용하여 Excel 범위에서 속성 값을 검색하려면

  1. InvokeMember 메서드를 사용하여 Excel 개체의 속성 값을 가져오는 도우미 함수를 만듭니다. 개체, 속성 이름 및 속성의 매개 변수가 도우미 메서드에 전달됩니다.

    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 솔루션 전역화 및 지역화

기타 리소스

Deploying Office Solutions

Office 솔루션 디자인 및 만들기