我将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);
答案 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元素或属性匹配名称(或其中的一部分)。同样,替换操作不能对整个文件进行操作。