Open XML for primary school goers

Ok ..I agree! I was not a simple-sober-studious-obedient-goodie-good student.

I do remember when I was a primary school goer, whenever me or any of my friends wanted a leave, we almost always used the same letter template, just modifying a few fields.

Yesterday, I was thinking about this. While working on an Open XML issue and thought of creating a sample which primary school goers can use to generate application templates.

This sample just takes the fields that you are finally going to modify and creates the application docx for you. Oh .. well it will also demonstrate how to modify CustomXML attached to a docx file.

 

Here is it. Have fun -

 

 

 Imports System.IO
Imports System.IO.Packaging
Imports System.Xml
Public Class AddFields

    Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
        Me.Close()
    End Sub

    Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
        Dim fieldscollection As New Collection
        fieldscollection.Add(AddressTo.Text, "AddressTo")
        fieldscollection.Add(Place.Text, "Place")
        fieldscollection.Add(Teacher.Text, "Teacher")
        fieldscollection.Add(Sickness.Text, "Sickness")
        fieldscollection.Add(TimeFrame.Text, "TimeFrame")
        fieldscollection.Add(Days.Text, "Days")
        fieldscollection.Add(StudentName.Text, "StudentName")
        fieldscollection.Add(Dated.Text, "Dated")
        UpdateXML(fieldscollection)

    End Sub

    Public Sub UpdateXML(ByRef fs As Collection)

        ' Given a file name, retrieve the officeDocument part.
        Dim fileName As String = "C:\Users\username\Desktop\test\application.docx"

        Const documentRelationshipType As String = "https://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
        Const customRelationshipType As String = "https://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml"

        ' Open the package with read/write access.
        Using myPackage As Package = Package.Open(fileName, FileMode.Open, FileAccess.ReadWrite)
            ' Get the main document part (workbook.xml, document.xml, presentation.xml).
            For Each relationship As PackageRelationship In myPackage.GetRelationshipsByType(documentRelationshipType)
                ' There should only be one document part in the package. 
                Dim documentUri As Uri = PackUriHelper.ResolvePartUri(New Uri("/", UriKind.Relative), relationship.TargetUri)
                Dim documentPart As PackagePart = myPackage.GetPart(documentUri)
                Dim customPart As PackagePart = Nothing 'declare a custom part
                'Get the custom xml part
                For Each crelation As PackageRelationship In documentPart.GetRelationshipsByType(customRelationshipType)
                    'There should be only one customxml part in the package
                    Dim customUri As Uri = PackUriHelper.ResolvePartUri(New Uri("/", UriKind.Relative), crelation.TargetUri)
                    customPart = myPackage.GetPart(customUri)
                    Exit For
                Next

                Dim customDoc As XmlDocument = New XmlDocument()
                customDoc.Load(customPart.GetStream())
                'Update XML
                customDoc.SelectSingleNode("/root/addressto").InnerXml = fs.Item("AddressTo")
                customDoc.SelectSingleNode("/root/place").InnerXml = fs.Item("Place")
                customDoc.SelectSingleNode("/root/teacher").InnerXml = fs.Item("Teacher")
                customDoc.SelectSingleNode("/root/sickness").InnerXml = fs.Item("Sickness")
                customDoc.SelectSingleNode("/root/timeframe").InnerXml = fs.Item("TimeFrame")
                customDoc.SelectSingleNode("/root/days").InnerXml = fs.Item("Days")
                customDoc.SelectSingleNode("/root/name").InnerXml = fs.Item("StudentName")
                customDoc.SelectSingleNode("/root/date").InnerXml = fs.Item("Dated")

             
                ' Save the modified customxml back into its part.
                customDoc.Save(customPart.GetStream(FileMode.Create, FileAccess.ReadWrite))

               
                ' Only one customXML part, so get out now.
                Exit For
            Next
            myPackage.Flush()
            myPackage.Close()
        End Using
        MsgBox("Done!")
    End Sub


End Class

 

docx that it modifies is also attached to the post.

 

 

del.icio.us tags: Microsoft+Blogger, Pranav+Wagh, Open+XML, OpenXML, Office+2007, Office2007, Word+2007, Word2007

Technorati tags: Microsoft+Blogger, Pranav+Wagh, Open+XML, OpenXML, Office+2007, Office2007, Word+2007, Word2007

 

Not responsible for errors in content, meaning, tact, or judgment. Live and let live. Toes go in first. I didn't do it. Enjoy.