[이 글은 프리릴리스 문서로, 출시 후에 변경될 가능성이 있습니다.]
Office Open XML 패키지의 사양은 컨텐츠를 포함하여, 단일 패키지에 보관된 모든 파트의 관계를 정의하는 XML
파일집합을 정의합니다. 이러한 패키지는 Microsoft Office Excel 2007, Microsoft Office
PowerPoint 2007 및 Microsoft Office Word 2007 의 문서 파일을 구성하는 파트를 결합합니다.
Open XML 형식 기술 프리뷰 응용 프로그램 프로그래밍 인터페이스 (API)를 사용하여, 패키지를 생성하거나 패키지를 구성하는
파일을 조작할 수 있습니다. 이 토픽에서는 Word 2007에서 Office Open XML 패키지의 유효성 검사하기 위한 코드와
순서에 대해 설명하는데, 방식은 Office Open XML 형식을 지원하는 세가지의 2007 Office system 프로그램과 같습니다.
메모 : |
|
이 토픽의 코드 예제는 Visual Basic .NET 및 Visual C# 로 Microsoft Visual Studio 2008에서의 생성된 추가기능으로 사용할 수 있습니다. Visual Studio 2008에서의 추가 기능 생성 순서는 이 시리즈의 「Microsoft SDK for Open XML Formats 를 사용하여 작업 시작하기」에서 볼 수 있습니다.
|
Office Open XML 패키지의 유효성 검사하기
다음 코드에서는 Open XML 개체 모델의 Validate 메서드를 호출하여 SpreadsheetDocument
패키지의 유효성을 검사합니다.
' How to: Validate a package.
Public Sub ValidateSimplePackage(ByVal xlsxFile As String)
Dim xlsxDoc As SpreadsheetDocument = SpreadsheetDocument.Open(xlsxFile, True)
Using (xlsxDoc)
' Remove the main workbook part.
xlsxDoc.DeletePart(xlsxDoc.WorkbookPart)
' Validate package. Will return an exception
' because of the missing part.
xlsxDoc.Validate(Nothing)
End Using
End Sub
// How to: Validate a package
public void ValidateSimplePackage(string xlsxFile)
{
SpreadsheetDocument xlsxDoc = SpreadsheetDocument.Open(xlsxFile, true);
Using(xlsxDoc)
{
// Remove the main workbook part.
xlsxDoc.DeletePart(xlsxDoc.WorkbookPart);
// Validate the package. Will return an exception
// because of the missing part.
xlsxDoc.Validate(null);
}
}
코드 섹션에서는 먼저 문서 파일을 가리키는 변수를 선언합니다. 그리고, Open 메서드를 사용하여
패키지를 엽니다. 패키지는 쓰기 권한이 부여된 상태로 열립니다. 그리고, Delete 메서드를 사용하여, 문서의
워크통합문서 파트를 삭제합니다. 마지막에SpreadsheetDocument 개체의 Validate
메서드를 호출하여 패키지의 유효성을 검사합니다.
메모 : |
|
Validate 메서드는 각 파트의 XML 컨텐츠 유효성 검사는 실시하지 않습니다.
파트 컨텐츠를 유효성 검사하는 순서는 이 시리즈의 「[How-To] Open XML 개체 모델을
사용하여, Office Open XML 패키지의 파트 컨텐츠를 유효성 검사하기」에서 설명합니다.
|
사용자 지정 유효성 검사
프로그램에 의해서 유효성 검사를 완전히 제어하는 경우, 또는 복잡한 유효성 검사 체크를 실행해야 하는 경우는 Open XML 개체 모델에
있는 OpenXmlPackageValidationSettings
이벤트 처리기를 사용합니다.
' How to: Create custom validation.
Private Sub PackageValidationEventHandler(ByVal sender As Object, ByVal e As OpenXmlPackageValidationEventArgs)
Console.Beep()
Console.WriteLine("--------------------")
Console.WriteLine("OpenXmlPackageValidationError:")
Console.WriteLine(("Message = " + e.Message))
If (Not (e.PartClassName) Is Nothing) Then
Console.WriteLine(("PartClassName = " + e.PartClassName))
End If
If (Not (e.Part) Is Nothing) Then
Console.WriteLine((e.Part.Uri))
End If
If (Not (e.SubPart) Is Nothing) Then
Console.WriteLine((e.SubPart.Uri))
End If
If (Not (e.Message) Is Nothing) Then
Console.WriteLine(("OpenXmlPartProblem = " + e.Message))
End If
Console.WriteLine("--------------------")
Console.WriteLine("")
End Sub
Private Sub ValidatePackage(ByVal xlsxFile As String)
' Pass validation processing to event
Dim validationSettings As OpenXmlPackageValidationSettings = New OpenXmlPackageValidationSettings
AddHandler validationSettings.EventHandler, AddressOf PackageValidationEventHandler
Dim xlsxDoc As SpreadsheetDocument = SpreadsheetDocument.Open(xlsxFile, True)
Using (xlsxDoc)
xlsxDoc.DeletePart(xlsxDoc.WorkbookPart)
' Validate Package
xlsxDoc.Validate(validationSettings)
End Using
End Sub
// How to: Create custom validation
static void PackageValidationEventHandler(Object sender, OpenXmlPackageValidationEventArgs e)
{
Console.Beep();
Console.WriteLine("--------------------");
Console.WriteLine("OpenXmlPackageValidationError:");
Console.WriteLine("Message = " + e.Message);
if (e.PartClassName != null)
{
Console.WriteLine("PartClassName = " + e.PartClassName);
}
if (e.Part != null)
{
Console.WriteLine(e.Part);
}
if (e.SubPart != null)
{
Console.WriteLine(e.SubPart);
}
if (e.Message != null)
{
Console.WriteLine("OpenXmlPartProblem = " + e.Message);
}
Console.WriteLine("--------------------");
Console.WriteLine("");
}
static void ValidatePackage()
{
// Pass validation processing to event OpenXmlPackageValidationSettings validationSettings = new OpenXmlPackageValidationSettings();
validationSettings.EventHandler += new EventHandler<OpenXmlPackageValidationEventArgs>(PackageValidationEventHandler);
string xlsxFile = @"c:\Book1.xlsx";
SpreadsheetDocument xlsxDoc = SpreadsheetDocument.Open(xlsxFile, true);
xlsxDoc.DeletePart(xlsxDoc.WorkbookPart);
xlsxDoc.Save();
// Validate Package
xlsxDoc.Validate(validationSettings);
}
코드 섹션에서는 먼저 OpenXmlPackageValidationEventArgs 를 취득하는 사용자 지정 패키지 유효성 검사 이벤트 처리기를
생성합니다.
그리고 SpreadsheetDocument
개체의 Validate 메서드를 호출하는 사용자 지정 코드를 기술합니다.
먼저, 유효성 검사 처리를 PackageValidationEventHandler 에
건네줍니다. 그리고 문서 파일을 가리키는 변수를 선언합니다. 그리고, Open 메서드를 사용하여
패키지를 엽니다. 패키지는 쓰기 권한이 부여된 상태로 열립니다. 그리고, Delete 메서드를 사용하여 문서의
통합문서 파트를 삭제하고, Save 메서드를 사용하여 변경을 저장합니다. 마지막으로, SpreadsheetDocument
개체의 Validate 메서드를 호출하고, OpenXmlPackageValidationSettings
을 건네주고, 패키지의 유효성을 검사합니다.