字节数组excel工作簿

我正在尝试将字节数组转换为Excel工作簿。 当我这样做的时候

Response.BinaryWrite(renderedBytes); 

它工作正常,文件是预期的。 但是,当我尝试用我在网上find的这个方法做到这一点时:

  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工作簿。

看来您正尝试使用BinaryFormatterparsing包含在renderedBytes中的Excel文件格式的数据。 然而, BinaryFormatter不知道如何parsingExcel文件格式:它被devise为parsing一个特定的(私有的)二进制序列化格式,而不是别的 。 也就是说,只能使用它来反序列化通过调用BinaryFormatter.Serialize生成的数据。 Excel文件不符合此要求。

为了实际将二进制forms的Excel工作簿parsing为C#对象,必须使用一个可以这样做的库,例如EPPlus :

 private ExcelPackage ByteArrayToObject(byte[] arrBytes) { using (MemoryStream memStream = new MemoryStream(arrBytes)) { ExcelPackage package = new ExcelPackage(memStream); return package; } }