문서 수준 사용자 지정의 XML 스키마 및 데이터
중요 Microsoft Word에 대한 이 항목의 정보는 Microsoft에서 사용자 지정 XML과 관련된 특정 기능의 구현을 Microsoft Word에서 제거한 2010년 1월 이전에 Microsoft의 사용 허가를 받고 Microsoft Word에서 실행되는 프로그램을 사용 또는 개발하고 있는 미국 또는 미국 자치령의 개인 또는 조직의 사용 및 혜택을 위해 독점적으로 제공됩니다. Microsoft Word에 대한 정보는 2010년 1월 10일 이후 Microsoft에서 사용 허가를 받고 Microsoft Word에서 실행되는 프로그램을 사용 또는 개발하고 있는 미국 또는 미국 자치령의 개인 또는 조직에서 읽거나 사용하지 못할 수 있습니다. 이런 제품은 해당 날짜 이전에 사용 허가를 받거나 미국이 아닌 다른 곳에서 사용하기 위해 구매하고 사용 허가를 받은 동일한 제품처럼 작동하지 않습니다.
적용 대상: 이 항목의 정보는 Excel 2007 및 Excel 2010, Word 2007 및 Word 2010의 문서 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.
Microsoft Office Excel 및 Microsoft Office Word에서는 스키마를 문서에 매핑할 수 있는 기능을 제공합니다. 이 기능을 사용하면 간편하게 XML 데이터를 문서에 가져오거나 문서에서 XML 데이터를 내보낼 수 있습니다.
Visual Studio에서는 문서 수준 사용자 지정의 매핑된 스키마 요소를 프로그래밍 모델에 컨트롤로 노출합니다. Excel의 경우 Visual Studio는 데이터베이스, 웹 서비스 및 개체의 데이터에 대한 컨트롤 바인딩을 지원합니다. Visual Studio는 최종 사용자가 Word 및 Excel 솔루션을 더욱 편리하게 사용할 수 있도록 스키마 매핑된 문서와 함께 사용할 수 있는 작업 창을 지원합니다. 자세한 내용은 작업 창 개요를 참조하십시오.
참고
multipart XML 스키마는 Excel 솔루션에서 사용할 수 없습니다.
스키마를 Excel 통합 문서에 연결할 때 작성되는 개체
통합 문서에 스키마를 연결하면 Visual Studio에서는 여러 개의 개체를 자동으로 만들고 프로젝트에 해당 개체를 추가합니다. 이러한 개체는 Excel에서 관리하므로 Visual Studio 도구를 사용하여 삭제하지 말아야 합니다. 이러한 개체를 삭제하려면 워크시트에서 매핑된 요소를 제거하거나 Excel 도구를 사용하여 스키마를 연결 해제해야 합니다.
다음 두 개의 주 개체가 있습니다.
XML 스키마(XSD 파일). 통함 문서의 모든 스키마에 대해 Visual Studio는 스키마를 프로젝트에 추가합니다. 이 스키마는 솔루션 탐색기에서 XSD 확장명이 있는 프로젝트 항목으로 표시됩니다.
형식화된 DataSet 클래스. 이 클래스는 스키마를 기반으로 만들어집니다. 이 데이터 집합 클래스는 클래스 뷰에 표시됩니다.
스키마 요소를 Excel 워크시트에 매핑할 때 작성되는 개체
스키마 요소를 XML 소스 작업 창에서 워크시트에 매핑하면 Visual Studio에서는 다음과 같이 여러 개체를 자동으로 만들고 프로젝트에 추가합니다.
컨트롤. 통합 문서에 매핑된 각 개체에 대해 XmlMappedRange 컨트롤(반복되지 않는 스키마 요소) 또는 ListObject 컨트롤(반복되는 스키마 요소)이 프로그래밍 모델에 만들어집니다. ListObject 컨트롤을 삭제하려면 통합 문서에서 매핑과 매핑된 개체를 삭제해야 합니다. 컨트롤에 대한 자세한 내용은 호스트 항목 및 호스트 컨트롤 개요를 참조하십시오.
BindingSource. 반복되지 않는 스키마 요소를 워크시트에 매핑하여 XmlMappedRange를 만들면 BindingSource가 만들어지고 XmlMappedRange 컨트롤이 BindingSource에 바인딩됩니다. BindingSource는 형식화하여 작성된 DataSet 클래스의 인스턴스 같이 문서에 매핑된 스키마에 일치하는 데이터 소스의 인스턴스에 바인딩해야 합니다. 속성 창에 노출된 DataSource 및 DataMember 속성을 설정하여 바인딩을 만듭니다.
참고
BindingSource는 ListObject 개체에 대해 만들어지지 않습니다. 속성 창의 DataSource 및 DataMember 속성을 설정하여 ListObject를 데이터 소스에 수동으로 바인딩해야 합니다.
Office의 매핑된 스키마와 Visual Studio 데이터 소스 창
Office의 매핑된 스키마 기능과 Visual Studio 데이터 소스 창을 사용하면 보고하거나 편집하기 위한 데이터를 Excel 워크시트에 쉽게 표시할 수 있습니다. 두 경우 모두 데이터 요소를 Excel 워크시트로 끌 수 있습니다. 어떠한 방법을 사용하건 DataSet 또는 웹 서비스 같은 데이터 소스에 BindingSource를 통해 데이터 바인딩되는 컨트롤이 작성됩니다.
참고
반복되는 스키마 요소를 워크시트에 매핑하면 Visual Studio에서는 ListObject를 만듭니다. ListObject는 BindingSource를 통해 데이터에 자동으로 바인딩되지 않습니다. 속성 창의 DataSource 및 DataMember 속성을 설정하여 ListObject를 데이터 소스에 수동으로 바인딩해야 합니다.
다음 표에서는 두 방법 사이의 몇 가지 차이를 보여 줍니다.
XML 스키마 |
데이터 소스 창 |
---|---|
Office 인터페이스를 사용합니다. |
Visual Studio의 데이터 소스 창을 사용합니다. |
XML 파일에서 데이터를 가져오고 내보내기 위한 기본 제공 Office 기능을 활성화합니다. |
프로그래밍 방식으로 가져오기 및 내보내기 기능을 제공해야 합니다. |
데이터로 생성된 컨트롤을 채우기 위한 코드를 작성해야 합니다. |
데이터 소스 창에서 추가된 컨트롤에는 이를 채우기 위한 코드가 데이터베이스 서버에서 사용할 때 필요한 연결 문자열과 함께 자동으로 생성됩니다. |
스키마를 Word 문서에 연결할 때의 동작
문서 수준 Office 프로젝트에 사용되는 Word 문서에 스키마를 연결할 때는 데이터 개체가 작성되지 않습니다. 그러나 스키마 요소를 문서에 매핑하면 컨트롤이 작성됩니다. 컨트롤 형식은 매핑하는 요소의 형식에 따라 달라집니다. 반복되는 요소는 XMLNodes 컨트롤을 생성하고, 반복되지 않는 요소는 XMLNode 컨트롤을 생성합니다. 자세한 내용은 XMLNodes 컨트롤 및 XMLNode 컨트롤을 참조하십시오.
XML 스키마가 포함된 솔루션 배포
문서에 매핑된 XML 스키마를 사용하는 솔루션을 배포하려면 설치 관리자를 만들어야 합니다. 이 설치 관리자는 사용자 컴퓨터의 스키마 라이브러리에 해당 스키마를 등록해야 합니다. 스키마를 등록하지 않아도 솔루션은 실행됩니다. 사용자가 문서를 열면 이 문서의 요소를 기반으로 Word에서 임시 스키마가 생성되기 때문입니다. 그러나 이 경우 프로젝트를 만드는 데 사용한 스키마의 유효성을 검사하거나 이 스키마를 저장할 수는 없습니다. 설치 관리자에 대한 자세한 내용은 응용 프로그램 및 구성 요소 배포를 참조하십시오.
스키마가 라이브러리에 있고 등록되어 있는지 검사하기 위한 코드를 프로젝트에 추가할 수도 있습니다. 스키마가 등록되어 있지 않으면 사용자에게 경고 메시지를 표시할 수 있습니다.
' Ensure that the schema is in the library and registered with the document.
Private Function CheckSchema() As Boolean
Const namespaceUri As String = "http://schemas.contoso.com/projects"
Dim namespaceFound As Boolean = False
Dim namespaceRegistered As Boolean = False
Dim n As Word.XMLNamespace
For Each n In Application.XMLNamespaces
If (n.URI = namespaceUri) Then
namespaceFound = True
End If
Next
If Not namespaceFound Then
MessageBox.Show("XML Schema is not in library.")
Return False
End If
Dim r As Word.XMLSchemaReference
For Each r In Me.XMLSchemaReferences
If (r.NamespaceURI = namespaceUri) Then
namespaceRegistered = True
End If
Next
If Not namespaceRegistered Then
MessageBox.Show("XML Schema is not registered for this document.")
Return False
End If
Return True
End Function
// Ensure that the schema is in the library and registered with the document.
private bool CheckSchema()
{
const string namespaceUri = "http://schemas.contoso.com/projects";
bool namespaceFound = false;
bool namespaceRegistered = false;
foreach (Word.XMLNamespace n in Application.XMLNamespaces)
{
if (n.URI == namespaceUri)
{
namespaceFound = true;
}
}
if (!namespaceFound)
{
MessageBox.Show("XML Schema is not in library.");
return false;
}
foreach (Word.XMLSchemaReference r in this.XMLSchemaReferences)
{
if (r.NamespaceURI == namespaceUri)
{
namespaceRegistered = true;
}
}
if (!namespaceRegistered)
{
MessageBox.Show("XML Schema is not registered for this document.");
return false;
}
return true;
}