방법: Microsoft Office를 시작하지 않고 문서에 사용자 지정 XML 부분 추가

업데이트: 2007년 11월

적용 대상

이 항목의 정보는 Microsoft Office의 지정된 버전에만 적용됩니다.

Microsoft Office 버전

  • Excel 2007

  • PowerPoint 2007

  • Word 2007

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

Microsoft Office Excel, Microsoft Office PowerPoint 또는 Microsoft Office Word를 시작하지 않고도 문서에 사용자 지정 XML 부분을 추가할 수 있습니다. 이 방법은 서버와 같이 Microsoft Office가 설치되어 있지 않은 컴퓨터의 문서에 XML 데이터를 저장하려는 경우에 유용합니다. 자세한 내용은 사용자 지정 XML 부분 개요를 참조하십시오.

문서는 .docx, .xlsx 또는 .pptx와 같은 Open XML 형식 중 하나여야 합니다. 이진 파일 형식의 사용자 지정 XML 부분은 Microsoft Office 응용 프로그램을 시작해야만 액세스할 수 있습니다.

Microsoft Office를 시작하지 않고 사용자 지정 XML 부분을 추가하려면 PackagePackagePart 클래스를 사용합니다. 이러한 클래스에 대한 자세한 내용은 Windows Presentation Foundation의 문서를 참조하십시오.

Microsoft Office를 시작하지 않고 문서에 사용자 지정 XML 부분을 추가하려면

  1. 사용자 지정 XML 부분에 추가할 XML을 나타내는 XmlDocument 개체를 만듭니다.

    Dim xmlString As String = _
        "<?xml version=""1.0"" encoding=""utf-8"" ?>" & _
            "<employees https://schemas.microsoft.com/vsto/samples"">" & _
                "<employee>" & _
                    "<name>Karina Leal</name>" & _
                    "<hireDate>1999-04-01</hireDate>" & _
                    "<title>Manager</title>" & _
                "</employee>" & _
            "</employees>"
    
    Dim reader As StringReader = New StringReader(xmlString)
    Dim xmlDoc As XmlDocument = New XmlDocument()
    xmlDoc.Load(reader)
    
    string xmlString =
        "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
        "<employees xmlns=\"https://schemas.microsoft.com/vsto/samples\">" +
            "<employee>" +
                "<name>Karina Leal</name>" +
                "<hireDate>1999-04-01</hireDate>" +
                "<title>Manager</title>" +
            "</employee>" +
        "</employees>";
    
    StringReader reader = new StringReader(xmlString);
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(reader);
    
  2. 문서에 추가할 사용자 지정 XML 부분을 나타내는 새 PackagePart를 만듭니다. 그런 다음 이전에 만든 XmlDocument 개체의 XML을 새 사용자 지정 XML 부분에 저장합니다.

    Using package As Package = package.Open(fullDocumentPath, FileMode.Open, _
        FileAccess.ReadWrite)
        Dim uriPartTarget As Uri = New Uri("/customXml/employee1.xml", UriKind.Relative)
        If Not package.PartExists(uriPartTarget) Then
            Dim customXml As PackagePart = package.CreatePart(uriPartTarget, _
                "application/vnd.openxmlformats-officedocument.customXmlProperties+xml")
            Using partStream As Stream = customXml.GetStream(FileMode.Create, _
                FileAccess.ReadWrite)
                xmlDoc.Save(partStream)
            End Using
        End If
    End Using
    
    using (Package package = Package.Open(fullDocumentPath, FileMode.Open,
        FileAccess.ReadWrite))
    {
        Uri uriPartTarget = new Uri("/customXml/employee1.xml", UriKind.Relative);
    
        if (!package.PartExists(uriPartTarget))
        {
            PackagePart customXml = package.CreatePart(uriPartTarget,
                "application/vnd.openxmlformats-officedocument.customXmlProperties+xml");
    
            using (Stream partStream = customXml.GetStream(FileMode.Create,
                FileAccess.ReadWrite))
            {
                xmlDoc.Save(partStream);
            }
        }
    }
    

예제

다음 코드 예제에서는 %UserProfile%\My Documents 폴더(Windows XP 이하의 경우) 또는 %UserProfile%\Documents 폴더(Windows Vista의 경우)에 있는 Employees.docx라는 Word 문서에 사용자 지정 XML 부분을 추가합니다.

이 예제는 콘솔 응용 프로그램에서 사용하기 위한 것이지만 WPF(Windows Presentation Foundation) 응용 프로그램과 같이 .NET Framework 3.0 이상과 함께 작동하는 응용 프로그램에서 작동하도록 수정할 수 있습니다.

이 예제를 Excel 또는 PowerPoint 문서와 함께 사용할 수 있도록 수정하려면 Main 메서드를 수정하여 AddCustomXmlPart 메서드에 해당 문서의 전체 경로를 전달합니다.

Sub Main()
    AddCustomXmlPart(Environment.GetFolderPath( _
        Environment.SpecialFolder.MyDocuments) & "\Employees.docx")
End Sub

Private Sub AddCustomXmlPart(ByVal fullDocumentPath As String)
    Dim xmlDoc As XmlDocument = GetXmlDocumentFromString()

    If xmlDoc IsNot Nothing Then
        Using package As Package = package.Open(fullDocumentPath, FileMode.Open, _
            FileAccess.ReadWrite)
            Dim uriPartTarget As Uri = New Uri("/customXml/employee1.xml", UriKind.Relative)
            If Not package.PartExists(uriPartTarget) Then
                Dim customXml As PackagePart = package.CreatePart(uriPartTarget, _
                    "application/vnd.openxmlformats-officedocument.customXmlProperties+xml")
                Using partStream As Stream = customXml.GetStream(FileMode.Create, _
                    FileAccess.ReadWrite)
                    xmlDoc.Save(partStream)
                End Using
            End If
        End Using
    End If
End Sub

Private Function GetXmlDocumentFromString() As XmlDocument
    Dim xmlString As String = _
        "<?xml version=""1.0"" encoding=""utf-8"" ?>" & _
            "<employees https://schemas.microsoft.com/vsto/samples"">" & _
                "<employee>" & _
                    "<name>Karina Leal</name>" & _
                    "<hireDate>1999-04-01</hireDate>" & _
                    "<title>Manager</title>" & _
                "</employee>" & _
            "</employees>"

    Dim reader As StringReader = New StringReader(xmlString)
    Dim xmlDoc As XmlDocument = New XmlDocument()
    xmlDoc.Load(reader)
    Return xmlDoc
End Function
static void Main(string[] args)
{
    AddCustomXmlPart(Environment.GetFolderPath(
        Environment.SpecialFolder.MyDocuments) + @"\Employees.docx");
}

private static void AddCustomXmlPart(string fullDocumentPath)
{
    XmlDocument xmlDoc = GetXmlDocumentFromString();

    if (xmlDoc != null)
    {
        using (Package package = Package.Open(fullDocumentPath, FileMode.Open,
            FileAccess.ReadWrite))
        {
            Uri uriPartTarget = new Uri("/customXml/employee1.xml", UriKind.Relative);

            if (!package.PartExists(uriPartTarget))
            {
                PackagePart customXml = package.CreatePart(uriPartTarget,
                    "application/vnd.openxmlformats-officedocument.customXmlProperties+xml");

                using (Stream partStream = customXml.GetStream(FileMode.Create,
                    FileAccess.ReadWrite))
                {
                    xmlDoc.Save(partStream);
                }
            }
        }
    }
}

private static XmlDocument GetXmlDocumentFromString()
{
    string xmlString =
        "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
        "<employees xmlns=\"https://schemas.microsoft.com/vsto/samples\">" +
            "<employee>" +
                "<name>Karina Leal</name>" +
                "<hireDate>1999-04-01</hireDate>" +
                "<title>Manager</title>" +
            "</employee>" +
        "</employees>";

    StringReader reader = new StringReader(xmlString);
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(reader);
    return xmlDoc;
}

코드 컴파일

  • 이 예제를 실행하려면 WindowsBase.dll 어셈블리에 대한 참조가 필요합니다. 이 어셈블리는 .NET Framework 버전 3.0 이상에 포함되어 있습니다.

  • 이 예제에서는 다음 네임스페이스에 대한 using(C#의 경우) 또는 Imports(Visual Basic의 경우) 문을 사용한다고 가정합니다.

    • System.IO

    • System.IO.Packaging

    • System.Xml

참고 항목

작업

방법: 문서 수준 사용자 지정에 사용자 지정 XML 부분 추가

방법: 응용 프로그램 수준 추가 기능을 사용하여 문서에 사용자 지정 XML 부분 추가

개념

사용자 지정 XML 부분 개요