여러 가지 국가별 설정으로 Excel의 데이터 서식 지정
날짜와 통화 같이 로캘에 따라 다른 서식을 사용하는 모든 데이터는 영어(미국) 데이터 형식(로캘 ID 1033)을 사용하여 서식을 지정해야 해당 데이터를 Microsoft Office Excel로 전달하거나 Office 프로젝트의 코드에서 읽을 수 있습니다.
적용 대상: 이 항목의 정보는 Excel 2007 및 Excel 2010의 문서 수준 프로젝트 및 응용 프로그램 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.
기본적으로 Visual Studio에서 Office 솔루션을 개발할 때 Excel 개체 모델은 로캘 ID 1033 데이터 형식을 예상합니다. 이를 가리켜 개체 모델을 로캘 ID 1033으로 잠근다고도 합니다. 이 동작은 Visual Basic for Applications가 작동하는 방법과 일치합니다. 그러나 Office 솔루션에서 이 동작을 수정할 수 있습니다.
항상 로캘 ID 1033을 예상하는 Excel 개체 모델의 방식 이해
기본적으로 Visual Studio를 사용하여 만드는 Office 솔루션은 최종 사용자의 로캘 설정에 의해 영향을 받지 않으며 항상 로캘이 영어(미국)인 것처럼 동작합니다. 예를 들어 Excel에서 Value2 속성을 가져오거나 설정할 경우 해당 데이터는 로캘 ID 1033이 예상하는 서식으로 지정되어 있어야 합니다. 다른 데이터 형식을 사용하는 경우 예기치 않은 결과가 발생할 수 있습니다.
관리 코드에 의해 전달되거나 조작되는 데이터에 영어(미국) 형식을 사용하더라도 Excel에서는 최종 사용자의 로캘 설정에 따라 정확하게 데이터를 해석하고 표시합니다. 관리 코드가 로캘 ID 1033을 데이터와 함께 전달함으로써 데이터가 영어(미국) 형식으로 되어 있으며 사용자의 로캘 설정에 일치하도록 서식이 다시 지정되어야 함을 나타내기 때문에 Excel에서는 데이터 서식을 올바르게 지정할 수 있습니다.
예를 들어, 국가별 옵션을 독일어(독일) 로캘로 설정한 최종 사용자는 2005년 6월 29일이 29.06.2005 형식이 될 것으로 예상합니다. 그러나 솔루션에서 날짜를 문자열로 Excel에 전달하는 경우 영어(미국) 형식에 따라 날짜 서식을 6/29/2005로 지정해야 합니다. 셀 서식이 날짜인 경우 Excel에서는 독일어(독일) 형식으로 날짜를 표시합니다.
Excel 개체 모델에 다른 로캘 ID 전달
.NET Framework 4를 대상으로 하는 프로젝트에서 CLR(공용 언어 런타임)은 로캘 ID 1033을 로캘 구분 데이터를 받아들이는 Excel 개체 모델의 모든 메서드와 속성에 자동으로 전달합니다. 개체 모델에 대한 모든 호출에 대해 이 동작을 자동으로 변경할 수는 없습니다. 그러나 InvokeMember를 통해 메서드를 호출하고 로캘 ID를 메서드의 culture 매개 변수에 전달하여 특정 메서드에 다른 로캘 ID를 전달할 수 있습니다.
.NET Framework 3.5를 대상으로 하는 프로젝트에서 Microsoft Visual Studio Tools for Office Runtime은 기본적으로 로캘 ID 1033을 Excel 개체 모델에 전달합니다. 그러나 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute를 사용하여 이 동작을 수정할 수 있습니다.
최종 사용자 컴퓨터의 로캘 설정을 사용하도록 .NET Framework 3.5 프로젝트 수정
.NET Framework 3.5를 대상으로 하는 Office 프로젝트에서 전체 Excel 개체 모델에 대한 로캘 ID 동작의 잠금을 해제할 수 있습니다. Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute는 이러한 프로젝트에서 Excel 개체 모델 동작을 제어합니다. 기본적으로 이 특성은 Excel 개체 모델에서 로캘 ID 1033 형식을 예상하도록 고정하는 true로 설정됩니다. 이 특성이 true인 경우 Visual Studio에서는 솔루션에서 인스턴스화되는 모든 Excel 개체를 Excel에 항상 로캘 ID 1033을 전달하는 프록시 개체에 래핑합니다. 이 특성을 false로 설정하면 이러한 프록시 개체가 사용되지 않으며 Excel 개체 모델에서는 최종 사용자의 로캘 설정을 사용합니다.
이 특성을 false로 설정하도록 선택하는 경우 리플렉션을 사용하여 Excel 속성 및 메서드에 대한 특정 호출에서 영어(미국) 데이터 형식(로캘 ID 1033)을 사용하도록 적용할 수 있습니다. 자세한 내용은 방법: 리플렉션을 사용하여 Excel의 문자열 리터럴 영역 안전하게 만들기를 참조하십시오.
참고
특성을 false로 설정하고 최종 사용자에게 영어(미국)가 아닌 로캘 설정이 있는 경우 솔루션에서 예기치 않은 동작이 발생할 수 있습니다.
개체 모델의 잠금을 해제하려면 프로젝트의 AssemblyInfo.vb 또는 AssemblyInfo.cs 파일에서 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute를 false로 설정합니다.
<Assembly: ExcelLocale1033(False)>
[assembly: ExcelLocale1033(false)]
참고
Microsoft Visual Studio Tools for Office Runtime에서는 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute가 true일 때 모든 네이티브 Excel 개체를 프록시 개체에 래핑하므로 네이티브 Excel 개체와 관련된 일부 작업에서 속도가 저하될 수 있습니다. 이러한 경우 Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap(System.Object) 메서드를 사용하여 프록시 없이 Excel 개체를 가져온 다음 해당 개체를 사용하여 작업을 수행하면 성능을 향상시킬 수 있습니다. 이 경우 Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap(System.Object)에서 반환되는 개체는 로캘 ID 1033이 아니라 현재 스레드의 로캘 ID를 사용합니다.
참고 항목
작업
방법: 리플렉션을 사용하여 Excel의 문자열 리터럴 영역 안전하게 만들기
개념
Visual Studio Tools for Office 런타임 개요