gpt4 book ai didi

c# - 字节数组到 excel 工作簿

转载 作者:太空狗 更新时间:2023-10-29 22:37:17 26 4
gpt4 key购买 nike

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

您似乎正在尝试使用 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;
}
}

关于c# - 字节数组到 excel 工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23762274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com