use*_*017 5 c# asp.net arrays excel byte
我正在尝试将字节数组转换为excel工作簿.我这样做的时候
Response.BinaryWrite(renderedBytes);
Run Code Online (Sandbox Code Playgroud)
它工作正常,文件已经过了.但当我尝试用我在网上找到的这个时:
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;
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
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.
Run Code Online (Sandbox Code Playgroud)
二进制写和反序列化的工作方式有区别吗?我该如何解决?
谢谢
我假设你正在努力做到Object workBook = ByteArrayToObject(renderedBytes);最终没有按预期工作.
由于您声明Response.BinaryWrite(renderedBytes);按预期工作(您可能意味着可以保存响应并在Excel中打开它),因此二进制数据renderedBytes是Excel文件格式的有效Excel工作簿.
您似乎正在尝试renderedBytes使用a中包含的Excel文件格式解析数据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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14733 次 |
| 最近记录: |