서버에 있는 문서의 데이터 액세스

Microsoft Office Word 또는 Microsoft Office Excel의 개체 모델을 사용하지 않고도 문서 수준 사용자 지정의 데이터를 대상으로 프로그래밍 작업을 할 수 있습니다. 즉, Word 또는 Excel이 설치되어 있지 않은 서버의 문서에 포함된 데이터에 액세스할 수 있습니다. 예를 들어 서버의 코드(예: ASP.NET 페이지의 코드)에서 문서의 데이터를 사용자 지정하고 이렇게 사용자 지정된 문서를 최종 사용자에게 보낼 수 있습니다. 최종 사용자가 문서를 열면 사용자 지정된 데이터가 솔루션 어셈블리의 데이터 바인딩 코드를 통해 문서에 바인딩됩니다. 이는 문서의 데이터가 사용자 인터페이스와 구분되어 있기 때문에 가능합니다. 자세한 내용은 문서 수준 사용자 지정의 캐시된 데이터를 참조하십시오.

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

서버에서 사용할 데이터 캐싱

문서의 데이터 개체를 캐시하려면 디자인 타임에 해당 데이터 개체를 CachedAttribute 특성으로 표시하거나 런타임에 호스트 항목의 StartCaching 메서드를 사용합니다. 데이터 개체를 문서에 캐시하면 Microsoft Visual Studio Tools for Office Runtime에서는 개체를 문서에 저장된 XML 문자열로 serialize합니다. 개체는 특정 요구 사항을 충족해야 캐시할 수 있습니다. 자세한 내용은 데이터 캐싱을 참조하십시오.

서버 쪽 코드에서는 데이터 캐시의 모든 데이터 개체를 조작할 수 있습니다. 캐시된 데이터 인스턴스에 바인딩되는 컨트롤은 사용자 인터페이스와 동기화되므로 클라이언트에서 문서를 열 때 데이터에 대한 모든 서버 쪽 변경 내용이 자동으로 표시됩니다.

캐시의 데이터에 액세스

콘솔 응용 프로그램, Windows Forms 응용 프로그램 또는 웹 페이지 같은 Office 이외의 응용 프로그램에서 캐시의 데이터에 액세스할 수 있습니다. 캐시된 데이터에 액세스하는 응용 프로그램에는 완전 신뢰가 필요합니다. 부분 신뢰 웹 응용 프로그램을 사용하면 Office 문서에서 캐시된 데이터를 삽입, 검색 또는 변경할 수 없습니다.

데이터 캐시는 ServerDocument 클래스의 CachedData 속성에 의해 노출되는 컬렉션 계층 구조를 통해 액세스할 수 있습니다.

다음 코드 예제에서는 Excel 통합 문서 프로젝트의 Sheet1 클래스에 있는 캐시된 문자열에 액세스하는 방법을 보여 줍니다. 이 예제는 ServerDocument.Save 메서드에 대해 제공되는 보다 큰 예제의 일부입니다.

serverDocument1 = New ServerDocument(documentPath)
Dim hostItem1 As CachedDataHostItem = _
    serverDocument1.CachedData.HostItems("ExcelWorkbook1.Sheet1")
Dim dataItem1 As CachedDataItem = hostItem1.CachedData("CachedString")
serverDocument1 = new ServerDocument(documentPath);
CachedDataHostItem hostItem1 = 
    serverDocument1.CachedData.HostItems["ExcelWorkbook1.Sheet1"];
CachedDataItem dataItem1 = hostItem1.CachedData["CachedString"];

캐시된 DataSet의 데이터에 액세스하는 방법을 보여 주는 코드 예제를 보려면 방법: 서버에 있는 통합 문서에서 캐시된 데이터 검색을 참조하십시오.

캐시의 데이터 수정

캐시된 데이터 개체를 수정하려면 일반적으로 다음 단계를 수행합니다.

  1. 캐시된 개체의 XML 표현을 개체의 새 인스턴스로 deserialize합니다. 캐시된 데이터 개체를 나타내는 CachedDataItemXml 속성을 사용하여 XML에 액세스할 수 있습니다.

  2. 이 복사본에 대한 변경 작업을 수행합니다.

  3. 다음 옵션 중 하나를 사용하여 변경된 개체를 다시 데이터 캐시로 serialize합니다.

    • 변경 내용을 자동으로 serialize하려면 SerializeDataInstance 메서드를 사용합니다. 이 메서드는 DiffGram 형식을 사용하여 DataSet, DataTable 및 형식화된 데이터 집합 개체를 데이터 캐시에 serialize합니다. DiffGram 형식을 사용하면 오프라인 문서에서 데이터 캐시를 변경한 내용이 서버에 올바르게 전달됩니다. 자세한 내용은 DiffGrams(ADO.NET)를 참조하십시오.

    • 고유한 방식으로 변경 사항을 캐시된 데이터로 serialize하려는 경우 Xml 속성에 직접 씁니다. DataAdapter를 사용하여 DataSet, DataTable 또는 형식화된 데이터 집합의 데이터에 대한 변경 내용으로 데이터베이스를 업데이트하는 경우 DiffGram 형식을 지정합니다. 그렇지 않으면 DataAdapter가 기존 행을 수정하는 대신 새 행을 추가하여 데이터베이스를 업데이트합니다.

Xml 속성에 직접 쓰는 방법으로 캐시된 데이터 개체의 변경 내용을 serialize하는 코드 예제는 방법: 서버에 있는 통합 문서에서 캐시된 데이터 변경을 참조하십시오.

현재 값을 deserialize하지 않고 데이터 수정

현재 값을 먼저 deserialize하지 않고 캐시된 개체의 값을 수정하려는 경우가 있습니다. 예를 들어 문자열 또는 정수와 같은 단순 형식의 개체 값을 변경하거나 서버의 문서에 있는 캐시된 DataSet를 초기화하려는 경우가 이에 해당합니다. 이러한 경우 캐시된 개체의 현재 값을 먼저 deserialize하지 않고 SerializeDataInstance 메서드를 사용할 수 있습니다.

다음 코드 예제에서는 Excel 통합 문서 프로젝트의 Sheet1 클래스에 있는 캐시된 문자열의 값을 변경하는 방법을 보여 줍니다. 이 예제는 ServerDocument.Save 메서드에 대해 제공되는 보다 큰 예제의 일부입니다.

serverDocument1 = New ServerDocument(documentPath)
Dim hostItem1 As CachedDataHostItem = _
    serverDocument1.CachedData.HostItems("ExcelWorkbook1.Sheet1")
Dim dataItem1 As CachedDataItem = hostItem1.CachedData("CachedString")

If dataItem1 IsNot Nothing AndAlso _
    Type.GetType(dataItem1.DataType).Equals(GetType(String)) Then

    dataItem1.SerializeDataInstance("This is the new cached string value.")
    serverDocument1.Save()
End If
serverDocument1 = new ServerDocument(documentPath);
CachedDataHostItem hostItem1 = 
    serverDocument1.CachedData.HostItems["ExcelWorkbook1.Sheet1"];
CachedDataItem dataItem1 = hostItem1.CachedData["CachedString"];

if (dataItem1 != null &&
    Type.GetType(dataItem1.DataType) == typeof(string))
{
    dataItem1.SerializeDataInstance("This is the new cached string value.");
    serverDocument1.Save();
}

서버의 캐시된 DataSet를 초기화하는 방법을 보여 주는 코드 예제를 보려면 방법: 서버에 있는 통합 문서에 데이터 삽입을 참조하십시오.

데이터 캐시의 Null 값 수정

문서가 저장되고 닫힐 때 null 값이 있는 개체는 데이터 캐시에 저장되지 않습니다. 이 제한으로 인해 캐시된 데이터를 수정할 때 다음과 같은 결과가 발생합니다.

  • 데이터 캐시의 개체를 null 값으로 설정하면 문서가 열릴 때 데이터 캐시의 모든 개체가 자동으로 null로 설정되고 문서가 저장되고 닫힐 때 데이터 캐시 전체가 지워집니다. 즉, 캐시된 개체가 모두 데이터 캐시에서 제거되고 CachedData 컬렉션이 비어 있게 됩니다.

  • 데이터 캐시의 null 개체를 사용하여 솔루션을 만들 경우 문서가 처음으로 열리기 전에 ServerDocument 클래스를 사용하여 이러한 개체를 초기화하려면 데이터 캐시의 모든 개체를 초기화해야 합니다. 일부 개체만 초기화하면 문서가 열릴 때 모든 개체가 null로 설정되고 문서가 저장되고 닫힐 때 데이터 캐시 전체가 지워집니다.

캐시의 형식화된 데이터 집합에 액세스

Office 솔루션 및 Office 이외의 응용 프로그램(예: Windows Forms 응용 프로그램 또는 ASP.NET 프로젝트)에서 형식화된 데이터 집합의 데이터에 액세스하려면 형식화된 데이터 집합을 두 프로젝트 모두에서 참조되는 별도의 어셈블리에 정의해야 합니다. 데이터 소스 구성 마법사 또는 데이터 집합 디자이너를 사용하여 각 프로젝트에 형식화된 데이터 집합을 추가하는 경우 .NET Framework는 두 프로젝트의 형식화된 데이터 집합을 서로 다른 형식으로 취급합니다. 형식화된 데이터 집합 만들기에 대한 자세한 내용은 방법: 형식화된 데이터 집합 만들기를 참조하십시오.

참고 항목

작업

방법: 서버에 있는 통합 문서에서 캐시된 데이터 검색

방법: 서버에 있는 통합 문서에서 캐시된 데이터 변경

방법: 서버에 있는 통합 문서에 데이터 삽입

개념

서버에 있는 문서의 데이터 액세스

문서 수준 사용자 지정의 캐시된 데이터

DiffGrams(ADO.NET)