2010-12-02 2 views
2

Я динамически генерирую файл слова, и щелчок по ссылке открывает диалог сохранения файла, и он говорит, что документ является документом Microsoft Word 97 - 2003.Программно изменить версию словарного документа?

Что мне нужно сделать, чтобы программно сгенерировать документ Word 2007, 2010.

код позади:

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 

ответ

3

Ваш документ не является ни 97 - 2003, ни 2007 - 2010 документ; это документ HTML Word.

Диалог сохранения говорит Word 97 - 2003 Document, потому что вы отправляете неправильное расширение.
Изменение расширения (в заголовке Content Disposition) на .docx сделает диалог сохранения Word Document, но не сделает документ более актуальным. (и, вероятно, сделает Word более вероятным, чтобы показать предупреждение)

Вам нужно сгенерировать пакет OpenXML, а не Word HTML.
Для этого вы можете использовать OpenXML SDK Microsoft.
Обратите внимание, что для этого потребуется полная переработка вашего метода.

Смежные вопросы