C# 替换存储在表示Word/Excel文档的字节数组中的字符串

C# 替换存储在表示Word/Excel文档的字节数组中的字符串,c#,bytearray,replace,C#,Bytearray,Replace,我将Word和Excel文档存储在SQL Server数据库表中。这些文档通过我的C#应用程序从数据库中提取,并放入byte[]数组中 我想替换Word/Excel文档中的某些字符串。使用可用的字节数组执行此操作的最佳方法是什么 我在看这样的东西: string fileString = System.Text.Encoding.UTF8.GetString(image.ImageObject); fileString = fileString.Replace("FROM", "TO");

我将Word和Excel文档存储在SQL Server数据库表中。这些文档通过我的C#应用程序从数据库中提取,并放入
byte[]
数组中

我想替换Word/Excel文档中的某些字符串。使用可用的字节数组执行此操作的最佳方法是什么

我在看这样的东西:

string fileString = System.Text.Encoding.UTF8.GetString(image.ImageObject);

fileString = fileString.Replace("FROM", "TO");

byte[] newImageObject = System.Text.Encoding.UTF8.GetBytes(fileString);

我相信您必须将字节保存为Word/Excel文件,并使用office自动化工具进行更改


如果在二进制文件中随意更改字节,可能会导致偏移量、校验和、CRC检查、触发防病毒软件等混乱。

我建议您使用

考虑到
documentByteArray
是从数据库获取的文档字节内容,使用该库,您可以执行以下操作来替换Word文档中的文本:

using (MemoryStream mem = new MemoryStream())
{
    mem.Write(documentByteArray, 0, (int)documentByteArray.Length);
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
    {
        string docText = null;
        using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
        {
            docText = sr.ReadToEnd();
        }

        Regex regexText = new Regex("Hello world!");
        docText = regexText.Replace(docText, "Hi Everyone!");

        using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
        {
            sw.Write(docText);
        }
    }
}

上面的例子取自。您可以使用Excel电子表格执行类似操作

您的方法可能会失败

如果您谈论的是.doc和.xls,那么这些文件格式都是二进制的,这使得字节流很可能包含不完整的字节序列

即使不是这样,替换不同长度的字符串也会使偏移量和长度字段无效,从而导致打开文档时失败


另一方面,如果你正在谈论.DOX和.xSLX,这些文件实际上是压缩的XML文件,它们再也不能简单地搜索和替换:只需考虑查找字符串与XML元素或属性名称(或其一部分)匹配。同样,替换操作无法对整个文件进行操作。

我已编辑了您的标题。请参见“”,其中的共识是“不,他们不应该”。
什么是最好的方式
展示你的方式,也许我们可以建议一个更好的方式。@I4V请查看更新的问题。谢谢@MarcusVinicius。我研究了OpenXML,但我希望有一个更简单的选择。不过,实现起来并不困难。