Microsoft Office Word 또는 Microsoft Office Excel의 개체 모델을 사용하지 않고도 문서 수준 사용자 지정의 데이터에 대해 프로그래밍할 수 있습니다. 즉, Word 또는 Excel이 설치되지 않은 서버의 문서에 포함된 데이터에 액세스할 수 있습니다. 예를 들어 서버의 코드(예: ASP.NET 페이지의 코드)는 문서의 데이터를 사용자 지정하고 사용자 지정된 문서를 최종 사용자에게 보낼 수 있습니다. 최종 사용자가 문서를 열면 솔루션 어셈블리의 데이터 바인딩 코드가 사용자 지정된 데이터를 문서에 바인딩합니다. 이는 문서의 데이터가 사용자 인터페이스와 분리되어 있기 때문에 가능합니다. 자세한 내용은 문서 수준 사용자 지정의 캐시된 데이터를 참조하세요.
적용 대상: 이 항목의 정보는 Excel 및 Word용 문서 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 유형에서 사용할 수 있는 기능을 참조하세요.
서버에서 사용할 데이터 캐시
문서에서 데이터 개체를 캐시하려면 디자인 타임에 CachedAttribute 특성으로 표시하거나 런타임에 StartCaching 호스트 항목의 메서드를 사용합니다. 문서에서 데이터 개체를 캐시하는 경우 Visual Studio Tools for Office 런타임은 개체를 문서에 저장된 XML 문자열로 직렬화합니다. 개체가 캐싱에 적합하려면 특정 요구 사항을 충족해야 합니다. 자세한 내용은 캐시 데이터를 참조하세요.
서버 쪽 코드는 데이터 캐시의 모든 데이터 개체를 조작할 수 있습니다. 캐시된 데이터 인스턴스에 바인딩된 컨트롤은 사용자 인터페이스와 동기화되므로 클라이언트에서 문서를 열 때 데이터에 대한 서버 쪽 변경 내용이 자동으로 표시됩니다.
캐시의 데이터 액세스
콘솔 응용 프로그램, Windows Forms 응용 프로그램 또는 웹 페이지와 같이 Office 외부의 응용 프로그램에서 캐시의 데이터에 액세스할 수 있습니다. 캐시된 데이터에 액세스하는 애플리케이션에는 완전 신뢰가 있어야 합니다. 부분 신뢰가 있는 웹 응용 프로그램은 Office 문서에 캐시된 데이터를 삽입, 검색 또는 변경할 수 없습니다.
데이터 캐시는 ServerDocument 클래스의 CachedData 속성에 의해 노출되는 컬렉션의 계층 구조를 통해 액세스할 수 있습니다.
이 속성은 CachedData 문서 수준 사용자 지정에서 캐시된 모든 데이터를 포함하는 값을 반환 CachedData합니다.
각각 CachedData 에는 하나 이상의 CachedDataHostItem 개체가 포함됩니다. A CachedDataHostItem 는 단일 클래스 내에 정의된 모든 캐시된 데이터 개체를 포함합니다.
각각 CachedDataHostItem 에는 하나 이상의 CachedDataItem 개체가 포함됩니다. A CachedDataItem 는 캐시된 단일 데이터 개체를 나타냅니다.
다음 코드 예제에서는 Excel 통합 문서 프로젝트의 클래스에서 캐시된 문자열에
Sheet1액세스하는 방법을 보여 줍니다. 이 예제는 메서드에 대해 제공되는 더 큰 예제의 Save 일부입니다.
캐시의 데이터 수정
캐시된 데이터 개체를 수정하려면 일반적으로 다음 단계를 수행합니다.
캐시된 개체의 XML 표현을 개체의 새 인스턴스로 역직렬화합니다. 캐시된 데이터 개체를 Xml 나타내는 속성을 CachedDataItem 사용하여 XML에 액세스할 수 있습니다.
이 복사본을 변경합니다.
다음 옵션 중 하나를 사용하여 변경된 개체를 데이터 캐시로 다시 직렬화합니다.
변경 내용을 자동으로 직렬화하려면 이 메서드를 SerializeDataInstance 사용합니다. 이 메서드는 DiffGram 형식을 사용하여 데이터 캐시에 있는 DataSet, DataTable 및 형식화된 데이터셋 객체를 직렬화합니다. DiffGram 형식은 오프라인 문서의 데이터 캐시 변경 내용이 서버로 올바르게 전송되도록 합니다.
캐시된 데이터의 변경 내용에 대해 고유한 serialization을 수행하려는 경우 속성에 Xml 직접 쓸 수 있습니다. 데이터베이스를
으로 업데이트 할 경우, , , 또는 타입된 데이터 세트의 데이터에 변경을 가한 경우 DiffGram 형식을 지정합니다. 그렇지 않으면 DataAdapter 기존 행을 수정하는 대신 새 행을 추가하여 데이터베이스를 업데이트합니다.
현재 값을 역직렬화하지 않고 데이터 수정
경우에 따라 현재 값을 먼저 역직렬화하지 않고 캐시된 개체의 값을 수정할 수 있습니다. 예를 들어 문자열 또는 정수와 같이 단순 형식이 있는 개체의 값을 변경하거나 서버의 문서에 캐시된 DataSet 값을 초기화하는 경우 이 작업을 수행할 수 있습니다. 이러한 경우 캐시된 개체의 SerializeDataInstance 현재 값을 먼저 역직렬화하지 않고 메서드를 사용할 수 있습니다.
다음 코드 예제에서는 Excel 통합 문서 프로젝트의 클래스에서 Sheet1 캐시된 문자열의 값을 변경하는 방법을 보여 줍니다. 이 예제는 메서드에 대해 제공되는 더 큰 예제의 Save 일부입니다.
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();
}
데이터 캐시에서 null 값 수정
데이터 캐시는 문서를 저장하고 닫을 때 값이 null 인 개체를 저장하지 않습니다. 이 제한은 캐시된 데이터를 수정할 때 다음과 같은 몇 가지 결과를 초래합니다.
데이터 캐시의 개체를 null 값으로 설정하면 문서가 열릴 때 데이터 캐시의 모든 개체가 자동으로 null 로 설정되고 문서가 저장되고 닫히면 전체 데이터 캐시가 지워집니다. 즉, 캐시된 모든 개체가 데이터 캐시에서 제거되고 컬렉션이 CachedData 비어 있습니다.
데이터 캐시에 null 개체가 있는 솔루션을 빌드하고 문서를 처음으로 열기 전에 클래스를 사용하여 ServerDocument 이러한 개체를 초기화하려면 데이터 캐시의 모든 개체를 초기화해야 합니다. 일부 개체만 초기화하면 문서가 열릴 때 모든 개체가 null 로 설정되고 문서가 저장되고 닫혀 있을 때 전체 데이터 캐시가 지워집니다.
캐시의 형식화된 데이터 세트에 액세스
Office 솔루션과 Office 외부 응용 프로그램(예: Windows Forms 응용 프로그램 또는 ASP.NET 프로젝트)에서 형식화된 데이터 세트의 데이터에 액세스하려면 두 프로젝트에서 참조되는 별도의 어셈블리에서 형식화된 데이터 세트를 정의해야 합니다. 데이터 원본 구성 마법사 또는 데이터 세트 디자이너를 사용하여 각 프로젝트에 형식화된 데이터 세트를 추가하는 경우 .NET Framework는 두 프로젝트의 형식화된 데이터 세트를 다른 형식으로 처리합니다. 형식화된 데이터 세트를 만드는 방법에 대한 자세한 내용은 Visual Studio에서 데이터 세트 만들기 및 구성을 참조하세요.