将open xml string转换为byte []

时间:2014-05-05 14:07:09

标签: c# xml

所以,我正在使用OpenXML编辑word文档。由于某些原因,我将其全部转换为string

//conversion du byte en memorystream
using (var file = new MemoryStream(text))
using (var reader = new StreamReader(file))
{
    WordprocessingDocument wordDoc = WordprocessingDocument.Open(file, true);
    using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
    {
        docText = sr.ReadToEnd();
    }
}

然后,我将其转换为一个字节。

但是,简单的转换不起作用:

byte[] back2Byte = System.Text.Encoding.ASCII.GetBytes(docText );

因为字符串是一个打开的xml字符串。

试过这个,但是当我尝试用Word打开它时,总是有一个损坏的文件:

var repo = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(docText));

byte[] buffer = new byte[16 * 1024];
MemoryStream ms = new MemoryStream();

int read;
while ((read = repo.Read(buffer, 0, buffer.Length)) > 0)
{
    ms.Write(buffer, 0, read);
}

byte[] back2Byte = ms.ToArray();

所以,这也不起作用:

byte[] back2Byte = new byte[docText.Length * sizeof(char)];
System.Buffer.BlockCopy(docText.ToCharArray(), 0, back2Byte, 0, back2Byte.Length);

编辑:经过一些检查,它似乎是作为openxml文档写入数据库,因此,word无法读取它。用记事本打开它时没有错误

我该如何纠正?

所以,真正的问题是,如何将OpenXML字符串转换为可以在word中打开的字节?

1 个答案:

答案 0 :(得分:0)

你无法做到这一点。您只获取OpenXML文档的一部分的字节。根据定义,所有Microsoft Office文档都是多部分OpenXML文档。理论上,您可以使用像您当前使用的技术捕获所有部件的字节,但您还必须捕获重建多部件文档所需的所有部件/关系信息。你最好只读取文件的所有字节并按原样存储它们:

// to read the file as bytes
var fileName = @"C:\path\to\the\file.xlsx";
var fileBytes = File.ReadAllBytes(fileName);

// to recreate the file from the bytes
File.WriteAllBytes(fileName, fileBytes)

如果您需要这些字节的字符串形式,请尝试:

// to convert bytes to a (non-readable) text form
var fileContent = Convert.ToBase64String(fileBytes);

// to convert base-64 back to bytes
var fileBytes = Convert.FromBase64String(fileContent);

无论哪种方式,都绝对不需要将OpenXML SDK用于您的用例。