【问题标题】:Byte array to excel workbook字节数组到 Excel 工作簿
【发布时间】:2014-07-08 20:40:05
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 如果你用你正在编码的语言的标签和/或.net来标记它,你会得到更好的响应。

标签: c# asp.net arrays excel byte


【解决方案1】:

我假设您正在尝试执行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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    相关资源
    最近更新 更多