字节数组excel工作簿

时间:2014-05-20 14:16:07

标签: c# asp.net arrays excel byte

我正在尝试将字节数组转换为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.

二进制写和反序列化的工作方式有区别吗?我该如何解决?

由于

1 个答案:

答案 0 :(得分:8)

我假设你正在努力做Object workBook = ByteArrayToObject(renderedBytes);,结果证明不能按预期工作。

由于您声明Response.BinaryWrite(renderedBytes);按预期工作(您可能意味着可以保存响应并在Excel中打开它),因此renderedBytes中的二进制数据是一个有效的Excel工作簿。 Excel文件格式。

您似乎正在尝试使用renderedBytes解析BinaryFormatter中包含的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;
    }
}