【问题标题】:Downloaded word file displaying incorrectly下载的word文件显示不正确
【发布时间】:2009-11-20 07:02:39
【问题描述】:

我目前正在一个网站上工作,该网站显示生成的 word 文档存在一个奇怪的错误。该网站有一项功能,允许用户下载包含与其访问相关的信息的 Word 文档。该文件是通过一些 vb.net 代码生成的,并采用最终文档的 xml 模板并插入所需的相关内容。

奇怪的行为是,在某些机器上生成的 .doc 文件显示正常,而在其他机器上,在 Word 中打开时它显示为 XML。这两种行为都出现在同一版本的 Office (2003) 但在不同的计算机上。我的问题实际上是错误是否在于个别机器上的单词设置,或者代码中是否存在错误。

创建文件并下载的代码如下:

    Response.Clear()
    Response.ClearHeaders()
    Response.AddHeader("content-disposition", "inline; filename=MyNewFile")
    Response.ContentType = "application/msword"

    'Create the word file as a byte array based off an xml template document'
    Dim objWordGenerator As New WordFileGenerator
    Response.BinaryWrite(objWordGenerator.GetWordBytes)

    Response.Flush()
    Response.Clear()
    Response.End()

实际的 xml 模板非常大,因此可能不适合在此处发布,但如果需要,我可以提供更多信息。

更新:
设法修复了原始错误(事实证明,正在使用的原始文件名没有 .doc 扩展名)我发现了另一种奇怪的行为。

打开文件时,它会在 Word 中正确打开,但是当您保存它时,默认文件类型是 XML。当另存为 XML 文件时,它将在 Word 中正确打开,但我觉得这对最终用户来说有点令人困惑。我希望该文件默认保存为 DOC 文件。有没有办法强制这种情况发生?

更新 2:
下面是与 Document 属性相关的 XML 部分。文档的其余部分涉及内容和样式等,所以我的假设是这是最相关的部分。重申一下,我的问题是当下载的 .doc 文件用 word 打开时,默认的“另存为”选项是 XML 文件。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve">
  <o:DocumentProperties>
    <o:Title>Fancy Word Doc</o:Title>
    <o:Author>Bob Bobertson</o:Author>
    <o:Characters>999</o:Characters>
    <o:Company>A Fancy Company</o:Company>
    <o:Version>1.1.1</o:Version>
  </o:DocumentProperties>

干杯

【问题讨论】:

  • 您使用的是哪种文件格式? Microsoft Office XML 还是 Office Open XML?
  • 微软Office的xml格式
  • 您能否提供 XML 模板,将其放在网上某处?

标签: asp.net vb.net ms-word


【解决方案1】:

File -> SaveAs 文件类型是 XML,因为这是在 Word 中打开的文件。如果您希望它显示“Word 文档 (*.doc)”,那么您需要在服务器上创建一个真实的 Word 文档,而不是 XML。只需在文件名上添加 .doc 扩展名并不会改变它的真实内容。 Word 知道加载到其中的文件类型,并在保存时建议将其作为文件类型。我不知道有什么方法可以覆盖这种行为。

【讨论】:

    【解决方案2】:

    我在 Excel 中使用 Office XML 已经有一段时间了,这与我用来将其发送到客户端的代码非常相似。您可能想尝试看看它是否适合您。

    Dim xml As XmlDocument = New XmlDocument()
    xml.Load("report.doc")
    Response.ContentType = "application/vnd.ms-word"
    Response.AppendHeader("CONTENT-DISPOSITION", "attachment; filename=report.doc")
    Response.Write(xml.OuterXml)
    

    【讨论】:

      【解决方案3】:

      用 firefox 试试,你可能会发现它会以正确的扩展名保存。

      IIRC,因为版本 3 IE 更喜欢忽略 mime 类型并嗅探文件内容以查看“正确”文件格式是什么。也许是用魔法饼干?

      这是 Word 2007 或更高版本吗?尝试 Response.AddHeader("content-disposition", "attachment; filename='MyNewFile.doc'")

      附件鼓励浏览器保存文件而不是显示它。

      【讨论】:

      • 在 IE 和 Firefox 上的功能相同。如果我选择用 word 打开文件,那么默认的另存为选项是 XML。如果我先保存它,它会保存为 .doc。它与 Word 2003
      【解决方案4】:

      我进行了一些测试,但无法在我的 Word 2003 系统上重现您的问题。如果没有具体示例(以及行为不端的实际文件),提出任何建议纯属猜测。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-17
        • 2013-12-02
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        • 2016-10-01
        • 2015-07-20
        相关资源
        最近更新 更多