2

我已经加载了一个带有 word 文档的内存流,我希望能够更改内存流中的特定文本并将其保存回 word 文档,例如搜索和替换功能。请任何人都可以帮我解决这个问题,因为我不想使用 Word Interop 库。我已经有了加载和保存文档的代码,请参见下文。问题是,如果我将内存字符串转换为字符串并使用字符串替换方法,当我保存字符串时,word 文档中的所有格式都会丢失,当我打开文档时,它显示的只是到处都是黑框。

        private void ReplaceInFile(string filePath, string searchText, string replaceText)
    {
        byte[] inputFile = File.ReadAllBytes(filePath);
        MemoryStream memory = new MemoryStream(inputFile);

        byte[] data = memory.ToArray();

        string pathStr = Request.PhysicalApplicationPath + "\\Docs\\OutputDocument.doc";
        FileInfo wordFile = new FileInfo(pathStr);
        FileStream fileStream = wordFile.Open(FileMode.Create, FileAccess.Write, FileShare.None);

        fileStream.Write(data, 0, data.Length);

        fileStream.Close();

        memory.Close();
    }

我从互联网上的示例代码中复制了代码。所以这就是为什么使用 memorystream 的原因,因为我不知道该怎么做。我的问题是我工作的公司不想使用 interop 这个词,因为有时他们发现这个词可以在阻止编码功能执行的情况下显示弹出对话框。这就是为什么我想研究以编程方式实现邮件合并功能的方法。多年前我确实做了一件与我想在这里做的事情非常相似的事情,但在 Delphi 而不是 C# 中,我通常会丢失代码。因此,如果有人能对此有所了解,我将不胜感激。

4

2 回答 2

5

您将不得不使用 Word 互操作库 - 或至少类似的东西。它不像 Word 文档只是纯文本文档——它们是二进制文件。将字节转换为字符串并以这种方式进行替换将完全破坏文档。

使用新的开放格式,您也许可以编写自己的代码来解析它们,但这比使用库要困难得多。

于 2009-10-08T10:40:34.407 回答
0

最好的办法是将文件转换为 OOXML - 然后这是一个 XML 文件,您可以使用字符串查找/替换、System.XML 或 LINQ 以编程方式对其进行更新。

(有关服务器端转换过程的更多信息,请参阅http://blogs.msdn.com/b/ericwhite/archive/2008/09/19/bulk-convert-doc-to-docx.aspx。)

于 2011-04-12T21:18:43.277 回答