【问题标题】:Replacing strings stored in a byte array that represent Word/Excel document替换存储在表示 Word/Excel 文档的字节数组中的字符串
【发布时间】:2013-02-19 02:12:01
【问题描述】:

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

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • What is the best way 显示你的方式,也许我们可以建议一个更好的方式。
  • @I4V 请查看更新后的问题。

标签: c# bytearray replace


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我建议您使用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 电子表格进行类似操作。

    【讨论】:

    • 谢谢@MarcusVinicius。我研究了 OpenXML,但我希望有一个更简单的选择。不过看起来并不难实现。
    【解决方案3】:

    你的方法很可能会失败。

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 2018-10-31
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      相关资源
      最近更新 更多