所以,我正在使用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中打开的字节?
答案 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用于您的用例。