【问题标题】:Read word document in ASP.NET and replace text (Office 2003/2007)在 ASP.NET 中读取 word 文档并替换文本 (Office 2003/2007)
【发布时间】:2010-12-26 22:51:03
【问题描述】:

我使用的是 VS 2005,asp.net 2.0。

我需要在 asp.net 中读取一个 word 文档 (.doc),进行一些替换,然后生成另一个 word 文档。

到目前为止还可以。我是在安装了 Office 2003 的机器上完成的,所以在 VS 2005 中我添加了对“Microsoft Word 11.0 对象库”的引用。一切都很完美。打开/保存word文档的代码:http://www.dnzone.com/go?1387

问题 1:我需要在安装了 Office 2007 的机器上打开同一个项目并使其运行。当我这样做时,它无法识别引用。我只能添加对“Microsoft Word 12.0 对象库”的引用。如何以尽可能少的努力使其在两台机器上顺利运行?有办法吗?

问题 2:当我将这个应用程序部署到 Web 服务器时,它会正常工作吗?我是否必须在服务器中注册一些 dll 或组件或执行其他任何操作才能使此 office 集成正常工作?

【问题讨论】:

    标签: asp.net replace ms-word ms-office integration


    【解决方案1】:

    您不应该在服务器代码中使用 Word API。它不受支持,通常不会可靠地工作。

    【讨论】:

    • 是的,我听说过... tks!
    【解决方案2】:

    不久前我遇到了这个问题——我们最终将它保存为一个 RTF 文件,该文件仍然格式化然后使用 FileStream 和 .Replace(someStringValue) 基于键值,例如 #DateForEventStart 所以你有类似的东西这个

        public void something()
        {
            StreamReader stream = new FileStream(filePath);
            string template = stream.ReadToEnd();
            template.Replace(templateKeyValue, objectValue);
        }
    

    然后您可以将其流式传输到 memstream 或您需要的任何内容。我不知道你正在做的事情是否可能,但这是一个想法。

    【讨论】:

    • 我认为我不能使用 RTF,因为在进行替换时我有一些小表格可以插入到 word 文档中。在 Word XML 中有一个表格结构要遵循。查看 RTF 内容,我不明白如何才能实现该目标...
    • 这是您遗漏的一条信息,因此会更改推荐 ;-)。如果您想生成包含一些复杂内容(图像、图表等)的文档并将其作为响应输出,则使用 msdn xml 指南(相当简单)是一种方法。
    【解决方案3】:

    您可能想看看 Aspose 产品。它们旨在在服务器环境中工作(但不是免费的)

    【讨论】:

      【解决方案4】:

      节省大量工作并使用 Word XML(在 Word 2002 及更高版本中可用)来创建您的模板。检查生成的 XML 代码以查看您必须在哪里进行替换。与 Office 2002、2003、2007 兼容,无需服务器组件。

      Word XML 在 99% 的情况下看起来与相应的 DOC 文件相同,但更易于维护。加上对所有 Word 功能的支持,这就是为什么您可能会喜欢它而不是 RTF。

      【讨论】:

      • 简,我就是这样做的。但我现在面临着替换的神秘问题。不知何故,当对文档进行随机替换组合时,Word无法打开它,它给我一个错误,说文档sintax中存在问题并且无法打开。我仍在试图弄清楚发生了什么。有什么想法吗???
      • 你是用 Word XML 格式做的吗?您声明您的问题中有 .DOC 文件。 Word XML 格式是 2002/2003/2007 提供的格式,扩展名为 .xml。使用该格式时,您必须注意您并没有破坏 XML 结构,但很清楚;只要您只是更换一些小部件(例如模板系统),它就没有那么多问题。
      • 是的,这是 word xml 格式。为了生成我的 XML 模板,我以 word 格式打开了 .doc 并保存为 XML 格式。然后我读取 xml 文件内容并执行替换。是的,我只是替换了一小部分内容。即:strXmlContents = strXmlContents.Replace("##Name##", "Pamela Anderson");
      • 您能否提供一个示例 XML 文档和一个破坏您的文档的代码示例?
      • 其实我刚刚发现问题与替换无关。随机生成.doc文件时,在文件内容的末尾会生成一些word文档的垃圾片段,这就是Word无法打开它的原因。如果我在 TextPad 中打开文件并清理该垃圾,它就会打开!现在的谜团是......为什么会产生垃圾?我正在使用 StreamWriter 生成文件...
      【解决方案5】:

      我们发现了问题,它与文件创建有关。我在一个已经存在的文件上使用FileStreamFileMode.Open。我更改为FileMode.Create 以创建一个全新的文件,然后......瞧! :)

      非常感谢大家的回复,特别是Jan Jongboom

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-27
        • 2011-03-19
        • 2010-12-07
        • 1970-01-01
        相关资源
        最近更新 更多