下载的word文件显示不正确

时间:2009-11-05 15:35:31

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

我正在一个网站上工作,这个网站显示了生成的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部分。本文档的其余部分涉及内容和样式等,因此我的假设是这是最相关的部分。重申一下,我的问题是,当用word打开下载的.doc文件时,默认的“另存为”选项是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>

干杯

4 个答案:

答案 0 :(得分:1)

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

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)

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

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

相关问题