通过ASP.NET替换Word文档中的文本

时间:2010-03-16 20:52:50

标签: asp.net ms-word

如何通过ASP.NET替换Word文档中的字符串/单词?我只需要替换文档中的几个单词,所以我想留下来自第三方插件&互操作。我想通过打开文件并替换文本来完成此操作。

进行了以下尝试:

我创建了一个StreamReader和Writer来读取文件,但我认为我正在以错误的格式读写。我认为Word文档存储在二进制文件中?如果word文档是二进制文件,我将如何读取和写入二进制文件?

    Dim template As String = Request.MapPath("documentName.doc")
    If File.Exists(template) Then
        Dim sr As New StreamReader(template)
        Dim content As String = sr.ReadToEnd()
        sr.Close()
        Dim sw As New StreamWriter(template)        
        content = content.Replace("@ T O D A Y S D A T E", Date.Now.ToString("MM/dd/yyyy"))
        sw.Write(content)
        sw.Close()
    Else

4 个答案:

答案 0 :(得分:2)

Word二进制格式是Microsoft专有的。读取二进制格式的规范很复杂,需要花费很多时间来了解文档结构以及内部位和字节结构。我真的不认为你会随时沿着这条路走下去,所以请考虑以下几点:

  • 使用Open XML
  • 自动化Word
  • 使用Aspose等第三方库
  • 使用RTF而不是Doc。然后,您可以在文本中查找特定的RTF标记,并将其替换为另一组RTF文本块。如果RTF是可接受的格式,这可能是您想要做的最简单的事情。

个人经验,自动化Word并不像听起来那么糟糕。它实际上不适合服务器高容量环境,但对于较小的负载,如果您编写好代码来管理应用程序对象和处理异常,它当然可以很好地工作。

编辑:更正了我提到的最初的NDA评论。当我在2005/6期间处理这个问题时并没有意识到微软已经决定在最近一年发布它。

答案 1 :(得分:1)

很多选择:

  1. 其中一些很贵(Apose)
  2. 其中一些很难(二进制格式)
  3. 其中一些需要Interop(VSTO) 或更新的格式(Open XML)
  4. 有些人还没有提到,比如
    1. 在服务器上运行Word并且只是 写给那个(不推荐 MSFT,但可能是你唯一真实的 选择a)便宜,b)简单
    2. OfficeWriter

答案 2 :(得分:0)

  

如果word文档是二进制文件,我将如何以二进制文件读取和写入文件?

他们是,这就是为什么你应该使用第三方库来对他们进行编程。

  

我想留下来自第三方插件&互操作

此要求使任务非常困难。如果你的文件是“旧的Word格式”(.doc),我几乎会说你运气不好。如果您可以使用Word 2007文档(.docx),您应该能够通过解压缩文件(它本质上是一个ZIP存档)解决问题,在包含的XML文件中搜索/替换并再次压缩文档。

另请参阅:Generating a Word Document with C#

答案 3 :(得分:0)

您可以在服务器上轻松执行Word自动化,但这条路线充满了危险。自动化不是为了运行服务器端而设计的,当Word弹出一个提示或确认框等待无人能看到的输入时,你会发现它经常挂起。

您必须进行权衡,使用Word自动化并接受它可能会定期挂起(从每天到每周),或购买第三方解决方案。我使用Aspose,它解决了很多问题。