【问题标题】:Replace text in Word Document via ASP.NET通过 ASP.NET 替换 Word 文档中的文本
【发布时间】:2010-03-17 08:44:43
【问题描述】:

如何通过 ASP.NET 替换 Word 文档中的字符串/单词?我只需要替换文档中的几个词,所以我想远离 3rd 方插件和互操作。我想通过打开文件并替换文本来做到这一点。

进行了以下尝试:

我创建了一个 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

【问题讨论】:

  • 您是否从十六进制转储中获得了“@ T O D A Y S D A T E”?如果是 os,请松开多余的空格。

标签: asp.net ms-word


【解决方案1】:

Word 二进制格式是 Microsoft 专有的。读取二进制格式的规范很复杂,需要很长时间才能了解文档结构以及内部位和字节结构。我真的不认为你会在任何时候沿着这条路自救,所以请考虑以下几点:

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

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

已编辑:更正了我最初提到的 NDA 评论。当我在 2005/6 年从事此工作时就是这种情况,并且没有意识到微软已经决定在最近一年发布它。

【讨论】:

    【解决方案2】:

    很多选择:

    1. 其中一些价格昂贵(Apose)
    2. 其中一些很难(二进制格式)
    3. 其中一些需要互操作 (VSTO) 或更新的格式 (Open XML)
    4. 其中一些尚未提及,例如
      1. 在服务器上运行 Word 写信给那个(不推荐 MSFT,但可能是你唯一真正的 a) 便宜,b) 简单的选择
      2. OfficeWriter

    【讨论】:

    • 我确实提到了第 4.1 点,前面有“不要”。我同意这可能是最后的手段,但也要为服务器添加重启计划。
    【解决方案3】:

    如果word文档是二进制的,我该如何读写二进制文件?

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

    我想远离 3rd 方插件和互操作

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

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

    【讨论】:

    • 感谢您的意见。不幸的是,我正在使用 XP Word 文档,无法将它们升级到 XML 路径(公司无法将所有 XP Office 升级到更新版本)。我知道这是可以做到的,并且我在过去使用 VB3 创建了一个程序来做类似的事情。
    • @jReedInc,有一个插件可以让 Word/XP 读写 DOCX。
    • @jreedinc:当然可以,但可能非常非常困难。你每小时收费多少? Aspose Words 的价格是多少? :)
    • Aspose 899 美元,然后学习语法并与另一种动物打交道(甚至更多小时)。 Jørn Schou-Rode,你以前做过吗?我真的不认为这很难。就像我之前说的,很久以前我写了一个简单的脚本来编辑文档中的字符串。也许我应该挖掘旧硬盘...
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-12-12
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      相关资源
      最近更新 更多