到excel工作簿的字节数组
本文关键字:字节数 数组 字节 excel 工作簿 | 更新日期: 2023-09-27 18:04:09
我正在尝试将字节数组转换为excel工作簿。当我对
这样做时Response.BinaryWrite(renderedBytes);
它工作正常,文件与预期的一样。但是当我试着用这个我在网上找到的:
private Object ByteArrayToObject(byte[] arrBytes)
{
MemoryStream memStream = new MemoryStream();
BinaryFormatter binForm = new BinaryFormatter();
memStream.Write(arrBytes, 0, arrBytes.Length);
memStream.Seek(0, SeekOrigin.Begin);
Object obj = (Object)binForm.Deserialize(memStream);
return obj;
}
我得到一个错误:
System.Runtime.Serialization.SerializationException: Binary stream '0' does not contain a valid BinaryHeader. Possible causes are invalid stream or object version change between serialization and deserialization.
二进制写入和反序列化的工作方式有区别吗?我该怎么修理它?
谢谢
我假设你正在尝试做Object workBook = ByteArrayToObject(renderedBytes);
,结果不像预期的那样工作。
因为你说Response.BinaryWrite(renderedBytes);
按预期工作(你可能意味着你可以保存响应并在Excel中打开它),renderedBytes
中的二进制数据是Excel文件格式的有效Excel工作簿。
似乎您正在尝试使用BinaryFormatter
解析renderedBytes
中包含的Excel文件格式中的数据。然而,BinaryFormatter
不知道如何解析Excel文件格式:它被设计为解析特定的(专有的?)二进制序列化格式和,没有其他。也就是说,您只能使用它来反序列化调用BinaryFormatter.Serialize
生成的数据。Excel文件不满足此要求。
为了实际解析二进制形式的Excel工作簿到c#对象,你必须使用一个库,如EPPlus:
private ExcelPackage ByteArrayToObject(byte[] arrBytes)
{
using (MemoryStream memStream = new MemoryStream(arrBytes))
{
ExcelPackage package = new ExcelPackage(memStream);
return package;
}
}