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

时间:2013-03-04 20:50:55

标签: 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");

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

3 个答案:

答案 0 :(得分:1)

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

如果你在二进制文件中不知不觉地改变字节,你可能会搞乱偏移,校验和,CRC校验,触发反病毒软件等。

答案 1 :(得分:0)

我建议你使用Open XML SDK

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

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);
        }
    }
}

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

答案 2 :(得分:0)

你的方法可能会失败。

如果您正在谈论.doc和.xls,这些文件格式是二进制的,这使得字节流很可能包含not valid UTF-8的字节序列。

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

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