簡體   English   中英

字節數組excel工作簿

[英]Byte array to excel workbook

我正在嘗試將字節數組轉換為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工作簿。

看來,你正試圖解析包含在Excel文件格式的數據renderedBytes使用BinaryFormatter 但是, 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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM