2

我将 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);
4

3 回答 3

1

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

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

于 2013-03-04T21:04:31.700 回答
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);
        }
    }
}

上面的例子取自这里。您可以对 Excel 电子表格进行类似操作。

于 2013-03-04T21:13:36.040 回答
0

你的方法很可能会失败。

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

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

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

于 2013-03-04T21:20:01.410 回答