2010-03-16 117 views
2

如何通过ASP.NET替换Word文档中的字符串/单词?我只需要替换文档中的几个字,所以我想从第三方插件& interop中保持AWAY。我想通过打开文件并替换文本来完成此操作。通过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 
+0

你从十六进制转储得到 “@ TØd一Ÿ小号d一件T E”?如果操作系统松动多余的空间。 –

回答

2

Word二进制格式是Microsoft专有的。读取二进制格式的规范非常复杂,并且需要您花时间来了解文档结构和内部位和字节结构。我真的不认为你能救自己随时走这条路,所以考虑如下:

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

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

编辑:纠正了我提到的初始NDA评论。2005/6年我在这方面的工作就是这种情况,并没有意识到微软决定在最近一年发布。

+0

我将使用RTF格式。谢谢大家的意见。 – jreedinc

0

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

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

我想从第三方插件远离&互操作

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

参见:Generating a Word Document with C#

+0

感谢您的意见。不幸的是,我正在使用XP的Word文档,无法将它们升级到XML路线(公司无法将所有XP Office升级到新版本)。我知道一个事实,即可以完成这个任务,并且我创建了一个程序来在当天使用VB3做类似于此事的事情。 – jreedinc

+0

@jReedInc,有一个插件可以让Word/XP读写DOCX。 –

+0

@jreedinc:当然可以做到,但可能会非常困难。你每小时收费多少? Aspose Words的成本是多少? :) –

0

你可以很容易地做到这一点在服务器上执行的Word自动化,但是这条路充满了危险。自动化不是为了运行服务器端而设计的,当Word弹出一个提示或确认框等待无人能够看到的输入时,它会定期挂起。

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

1

很多选择:

  1. 他们中的一些昂贵(Apose)
  2. 他们中的一些硬(二进制格式)
  3. 他们中的一些要求互操作(VSTO) 或较新的格式(开放式XML )
  4. 它们中的一些尚未提到的,像
  5. 在服务器上运行Word和刚 写入该(未重新由MSFT推荐 ,但可能您唯一的真实 选择a)便宜,b)简单
  6. OfficeWriter
+0

我提到了4.1点,在它前面有'不要'。我同意这可能是最后的手段,但也为服务器添加重新启动计划。 –

+0

@亨克:啊,你确实! –

相关问题