다음을 통해 공유


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

업데이트: 2007년 11월

적용 대상

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

프로젝트 형식

  • 문서 수준 프로젝트

Microsoft Office 버전

  • Excel 2003

  • Excel 2007

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

날짜와 통화 같이 로캘에 따라 다른 서식을 사용하는 모든 데이터는 영어(미국) 데이터 형식(로캘 ID 1033)을 사용하여 서식을 지정해야 해당 데이터를 Microsoft Office Excel로 전달하거나 Visual Studio Tools for Office 프로젝트의 코드에서 읽을 수 있습니다.

기본적으로 Visual Studio Tools for Office 런타임에서는 Excel 개체 모델이 로캘 ID 1033 데이터 형식을 예상하도록 합니다. 이를 가리켜 개체 모델을 로캘 ID 1033으로 고정한다고도 합니다. 이 동작은 Visual Basic for Applications가 작동하는 방법과 일치합니다. 그러나 Visual Studio Tools for Office 솔루션에서 이 동작을 수정할 수 있습니다.

잠긴 Excel 개체 모델 프로그래밍

기본적으로 Visual Studio Tools for Office를 사용하여 만드는 문서 수준 사용자 지정과 응용 프로그램 수준 추가 기능은 최종 사용자 로캘 설정의 영향을 받지 않으며 항상 영어(미국) 로캘인 것처럼 동작합니다. 예를 들어 Excel에서 Value2 속성을 가져오거나 설정할 경우 해당 데이터는 로캘 ID 1033이 예상하는 서식으로 지정되어 있어야 합니다. 다른 데이터 형식을 사용하는 경우 예기치 않은 결과가 발생할 수 있습니다.

관리 코드에 의해 전달되거나 조작되는 데이터에 영어(미국) 형식을 사용하더라도 Excel에서는 최종 사용자의 로캘 설정에 따라 정확하게 데이터를 해석하고 표시합니다. 관리 코드가 로캘 ID 1033을 데이터와 함께 전달함으로써 데이터가 영어(미국) 형식으로 되어 있으며 사용자의 로캘 설정에 일치하도록 서식이 다시 지정되어야 함을 나타내기 때문에 Excel에서는 데이터 서식을 올바르게 지정할 수 있습니다.

예를 들어, 국가별 옵션을 독일어(독일) 로캘로 설정한 최종 사용자는 2005년 6월 29일이 29.06.2005 형식이 될 것으로 예상합니다. 그러나 솔루션에서 날짜를 문자열로 Excel에 전달하는 경우 영어(미국) 형식에 따라 날짜 서식을 6/29/2005로 지정해야 합니다. 셀 서식이 날짜인 경우 Excel에서는 독일어(독일) 형식으로 날짜를 표시합니다.

Excel 개체 모델 잠금 해제

Visual Studio Tools for Office에서는 전체 Excel 개체 모델에 대해 로캘 ID 동작의 잠금을 해제할 수 있습니다. ExcelLocale1033Attribute는 Visual Studio Tools for Office 솔루션에서 Excel 개체 모델 동작을 제어합니다. 기본적으로 이 특성은 Excel 개체 모델에서 로캘 ID 1033 형식을 예상하도록 고정하는 true로 설정됩니다. 이 특성을 true로 설정하면 Visual Studio Tools for Office에서는 솔루션에 의해 인스턴스화되는 모든 Excel 개체를 Excel에 항상 로캘 ID 1033을 전달하는 프록시 개체에 래핑합니다. 이 특성을 false로 설정하면 이러한 프록시 개체가 사용되지 않으며 Excel 개체 모델에서는 최종 사용자의 로캘 설정을 사용합니다.

참고:

특성을 false로 설정하고 최종 사용자에게 영어(미국)가 아닌 로캘 설정이 있는 경우 솔루션에서 예기치 않은 동작이 발생할 수 있습니다. 모든 로캘 설정에서 작동하도록 코드를 작성할 수 있습니다. 자세한 내용은 방법: 리플렉션을 사용하여 Excel의 문자열 리터럴 영역 안전하게 만들기를 참조하십시오.

개체 모델 잠금을 해제하려면 프로젝트의 AssemblyInfo.vb 또는 AssemblyInfo.cs 파일에서 ExcelLocale1033Attribute를 false로 설정합니다.

<Assembly: ExcelLocale1033(False)>
[assembly: ExcelLocale1033(false)]
참고:

Visual Studio Tools for Office 런타임에서는 ExcelLocale1033Attribute가 true일 때 모든 네이티브 Excel 개체를 프록시 개체에 래핑하므로 네이티브 Excel 개체와 관련된 일부 작업에서 속도가 저하될 수 있습니다. 이러한 경우 Unwrap 메서드를 사용하여 프록시 없이 Excel 개체를 가져온 다음 해당 개체를 사용하여 작업을 수행하면 성능을 향상시킬 수 있습니다. 이 경우 Unwrap에서 반환되는 개체는 로캘 ID 1033이 아니라 현재 스레드의 로캘 ID를 사용합니다.

Excel 2003 프로젝트의 특정 Excel 개체 잠금 해제

Excel 2003용 솔루션을 개발할 때 로캘 ID 1033 대신 현재 스레드의 로캘 ID를 사용하도록 네이티브 Excel 개체, 즉 Microsoft.Office.Interop.Excel 네임스페이스에 정의된 클래스의 인스턴스를 수정해야 하는 경우가 있습니다. 예를 들어 Excel 개체에 속한 메서드의 out 매개 변수로 null을 전달하려는 경우가 이에 해당합니다.

Excel 2003 프로젝트의 개별 Excel 개체에 대한 로캘 ID 동작을 변경하려면 ExcelLocale1033Proxy 클래스의 메서드를 사용합니다. Unwrap 메서드를 호출하여 로캘 ID 1033 대신 현재 스레드의 로캘 ID를 사용하도록 Excel 개체를 수정합니다.

Unwrap을 호출하여 Excel 개체를 수정한 후 현재 스레드의 로캘 ID 대신 로캘 ID 1033을 사용하여 해당 개체를 다시 사용하려고 할 수 있습니다. 현재 스레드의 로캘 ID 대신 로캘 ID 1033을 사용하도록 Excel 개체를 프록시 개체에 래핑하려면 Wrap 메서드를 사용합니다.

참고:

UnwrapWrap 메서드는 Excel 2007용 Visual Studio Tools for Office 프로젝트에서는 사용되지 않습니다. Excel 2007 프로젝트에서 사용되는 Visual Studio Tools for Office 런타임에는 ExcelLocale1033Attribute가 true일 때 네이티브 Excel 개체가 예상대로 동작하도록 하는 향상된 기능이 포함되어 있습니다. Visual Studio Tools for Office 런타임에 대한 자세한 내용은 Visual Studio Tools for Office 런타임 개요를 참조하십시오.

Excel 개체 모델이 잠겨 있는 동안 out 매개 변수가 있는 메서드 호출

Excel 2003 솔루션에서 ExcelLocale1033Attribute가 true인 경우 Excel 개체 모델의 메서드에 대한 out 매개 변수로 null을 전달하면 예외가 발생합니다. out 매개 변수로 null을 전달하려면 메서드를 호출하기 전에 Unwrap을 호출하고 해당 메서드가 포함된 개체를 전달해야 합니다.

또는 메서드를 호출하기 전에 매개 변수에 값을 할당할 수 있습니다. out 매개 변수에 대한 자세한 내용은 out(C# 참조)을 참조하십시오.

예를 들어 다음 코드를 실행하면 ExcelLocale1033Attribute가 true인 경우 예외가 throw됩니다. ExportXml 메서드에는 out 매개 변수가 있습니다.

Dim outString As String = Nothing
Dim result As Excel.XlXmlExportResult = _
    Globals.ThisWorkbook.XmlMaps(1).ExportXml(outString)
string outString = null;
Excel.XlXmlExportResult expResult =
Globals.ThisWorkbook.XmlMaps[1].ExportXml(out outString);

이 문제를 해결하려면 ExportXml을 호출하기 전에 XmlMapUnwrap 메서드에 전달합니다.

Dim outString As String = Nothing
Dim map As Excel.XmlMap = TryCast( _
    Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap( _
    Globals.ThisWorkbook.XmlMaps(1)), Excel.XmlMap)
Dim result As Excel.XlXmlExportResult = map.ExportXml(outString)
string outString = null;
Excel.XmlMap map = Microsoft.Office.Tools.Excel.
    ExcelLocale1033Proxy.Unwrap(
    Globals.ThisWorkbook.XmlMaps[1]) as Excel.XmlMap;
Excel.XlXmlExportResult expResult = map.ExportXml(out outString);

또는 outString 변수를 ExportXml에 전달하기 전에 이 변수에 값을 할당할 수 있습니다.

Dim outString As String = String.Empty
Dim result As Excel.XlXmlExportResult = _
    Globals.ThisWorkbook.XmlMaps(1).ExportXml(outString)
string outString = String.Empty;
Excel.XlXmlExportResult expResult =
    Globals.ThisWorkbook.XmlMaps[1].ExportXml(out outString);

참고 항목

작업

방법: Excel 솔루션 지역화

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

개념

Visual Studio에서 Office 솔루션 만들기

Visual Studio Tools for Office 런타임 개요

참조

ExcelLocale1033Attribute

ExcelLocale1033Proxy

기타 리소스

특성을 사용하여 메타데이터 확장