C# Aspose.Cells导出xlsx格式Excel,打开文件报“Excel 已完成文件级验证和修复。此工做簿的某些部分可能已被修复或丢弃”

报错信息:html

最近打开下载的 Excel,会报以下错误。(xls 格式不受影响)浏览器

解决方案:服务器

下载代码(红色为新添代码)app

public void download() { string fileName = "456.zip";//客户端保存的文件名
    string filePath = AppDomain.CurrentDomain.BaseDirectory.Replace("\\", "/") + "Excel/123.zip"; System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath); if (fileInfo.Exists == true) { //每次读取文件,只读取1M,这样能够缓解服务器的压力
        const long ChunkSize = 1048576; byte[] buffer = new byte[ChunkSize]; Response.Clear(); //获取文件
        System.IO.FileStream iStream = System.IO.File.OpenRead(filePath); //获取下载的文件总大小
        long dataLengthToRead = iStream.Length; //二进制流数据(如常见的文件下载)
        Response.ContentType = "application/octet-stream"; //通知浏览器下载文件而不是打开 
        Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));  //加上设置大小下载下来的.xlsx文件打开时才不会报“Excel 已完成文件级验证和修复。此工做簿的某些部分可能已被修复或丢弃”
        Response.AddHeader("Content-Length", iStream.Length.ToString()); using (iStream)//解决文件占用问题,using 外 iStream.Dispose() 没法释放文件
 { while (dataLengthToRead > 0 && Response.IsClientConnected) { int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
                Response.OutputStream.Write(buffer, 0, lengthRead); Response.Flush(); dataLengthToRead = dataLengthToRead - lengthRead; } iStream.Dispose(); iStream.Close(); } Response.Close(); Response.End(); } }

给下载加了个长度,解决问题。asp.net

Response.AddHeader("Content-Length", iStream.Length.ToString());

 


原文:asp.net NPOI导出xlsx格式文件,打开文件报“Excel 已完成文件级验证和修复。此工做簿的某些部分可能已被修复或丢弃”spa

相关文章
相关标签/搜索