Change version of word document programmatically?

I am dynamically generating a word file, and clicking the link opens the file save dialog and it says the document is a: Microsoft Word 97 - 2003 Document.

What would I need to do to programmatically generate a 2007, 2010 word document.

Code behind:

Public Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

    'build the content for the dynamic Word document
    'in HTML alongwith some Office specific style properties. 

    Dim strBody As New System.Text.StringBuilder("")

    strBody.Append("<html " & _
                    "xmlns:o='urn:schemas-microsoft-com:office:office' " & _
                    "xmlns:w='urn:schemas-microsoft-com:office:word'" & _
                    "xmlns='http://www.w3.org/TR/REC-html40'>" & _
                    "<head><title></title>")

    'The setting specifies document's view after it is downloaded as Print Layout
    'instead of the default Web Layout. For the Header & Footer to be visible,
    'this mode is required.

    strBody.Append("<!--[if gte mso 9]>" & _
                    "<xml>" & _
                    "<w:WordDocument>" & _
                    "<w:View>Print</w:View>" & _
                    "<w:Zoom>90</w:Zoom>" & _
                    "<w:DoNotOptimizeForBrowser/>" & _
                    "</w:WordDocument>" & _
                    "</xml>" & _
                    "<![endif]-->")

    'we can tweak the MsoFooter class that is referenced by the footer, as required

    strBody.Append("<style>" & _
                    "<!-- /* Style Definitions */" & _
                    "p.MsoFooter, li.MsoFooter, div.MsoFooter" & _
                    "{margin:0in;" & _
                    "margin-bottom:.0001pt;" & _
                    "mso-pagination:widow-orphan;" & _
                    "tab-stops:center 3.0in right 6.0in;" & _
                    "font-size:12.0pt;}")

    'Word uses the @page definition to store document layout settings for the entire document.
    'Using @page SectionN, Word applies page formatting to individual HTML elements referenced
    'through the class attribute.

    'mso-footer is the style attribute related to the footer 
    'Refer to the topic "Page Layout and Section Breaks" & "Headers and Footers" in the 

    'Office XML & HTML Reference for detailed info.

    strBody.Append("@page Section1" & _
                    "   {size:8.5in 11.0in; " & _
                    "   margin:1.0in 1.25in 1.0in 1.25in ; " & _
                    "   mso-header-margin:.5in; " & _
                    "   mso-footer: f1;" & _
                    "   mso-footer-margin:.5in; mso-paper-source:0;}" & _
                    " div.Section1" & _
                    "   {page:Section1;}" & _
                    "-->" & _
                    "</style></head>")

    strBody.Append("<body lang=EN-US style='tab-interval:.5in'>" & _
                    "<div class=Section1>" & _
                    "<h1>A dynamically generated document with Footer</h1>" & _
                    "<p style='color:red'><I> This doc was generated on " & _
                    DateTime.Now & "</I></p><hr>")

    'We are building up a big string here so that the generated doc runs into multiple pages.

    For counter As Integer = 1 To 50
        strBody.Append("Lorem ipsum dolor sit amet, consectetur adipisicing elit, " & _
                        "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.")
    Next

    strBody.Append("</div>")

    'Word marks and stores information for simple fields by means of the Span element with the 
    'mso-field-code style. Refer to the topic "Fields" in the Office XML & HTML Reference

    strBody.Append("<div style='mso-element:footer' id=f1>" & _
                    " <p class=MsoFooter>" & _
                    " <span style='mso-tab-count:2'></span><span style='mso-field-code:"" PAGE ""'></span>" & _
                    " </p></div>" & _
                    "</body></html>")

    'Force this content to be downloaded 
    'as a Word document with the name of your choice

    Response.AppendHeader("Content-Type", "application/msword")
    Response.AppendHeader("Content-disposition", _
                            "attachment; filename=myword.doc")
    Response.Write(strBody)

End Sub

Answers


Your document is neither a 97 - 2003 nor a 2007 - 2010 document; it's a Word HTML document.

The save dialog says Word 97 - 2003 Document because you're sending an incorrect extension. Changing the extension (in the Content Disposition header) to .docx will make the save dialog say Word Document, but will not make the document any more valid. (and will probably make Word more likely to show a warning)

You need to generate an OpenXML package, not Word HTML. You can use Microsoft's OpenXML SDK to do this. Note that this will require a complete rewrite of your method.


Need Your Help

T-SQL - Create a trigger to update the updated record's average time with the average of similar records over the past 90 days?

sql sql-server triggers sql-update

I am trying to create a trigger that when called, will update the most recently updated record's RollingAvgTime column with the average over the past 90 days.

LinkedIn - unable to find valid certification path to requested target

java linkedin

we have several apps that were working a few days ago and today they are not able to log into LinkedIn

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.