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

    报错信息:

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

    解决方案:

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

    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();
        }
    }

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

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

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

  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/cang12138/p/9003362.html
Copyright © 2011-2022 走看看