到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.

二进制写入和反序列化的工作方式有区别吗?我该怎么修理它?

谢谢

到excel工作簿的字节数组

我假设你正在尝试做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;
    }
}