WebApi使用EPPlus excel文件下载-打开错误-无法读取的内容-修复 [英] WebApi using EPPlus excel file download - error on open - unreadable content - repair

查看:395
本文介绍了WebApi使用EPPlus excel文件下载-打开错误-无法读取的内容-修复的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的extjs网络客户端上,我按下了一个按钮,它下载了一个excel模板并填充了数据。当我单击CHROME弹出窗口打开excel文件时,它给我下面的excel错误消息。有谁知道我该如何解决?
实际文件对我来说看起来不错。

On my extjs webclient I hit a button and it downloads an excel template and populates data. When I click on the CHROME popup to open excel file, it gives me the excel error message below. Does anyone know how I can fix this? The actual file looks fine to me.

这是我的webapi代码

Here is my webapi code

        public HttpResponseMessage CreatePosSheet(string cName, string calcMethod, string username, int cid, HttpRequestMessage Request)
    {
        string templatePath = HttpContext.Current.Server.MapPath(@"~\tempLocation\");
        string templateFileName = System.Configuration.ConfigurationManager.AppSettings["TemplateFileName"];
        string templateName = string.Format("{0}{1}", templatePath, templateFileName);
        FileInfo xlTemplate = new FileInfo(templateName);

        HttpResponseMessage response;
        response = Request.CreateResponse(HttpStatusCode.OK);
        MediaTypeHeaderValue mediaType = new MediaTypeHeaderValue("application/octet-stream");
        //MediaTypeHeaderValue mediaType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.Content = new ByteArrayContent(ExcelSheet(xlTemplate, cName, calcMethod, username, cid));
        response.Content.Headers.ContentType = mediaType;
        response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
        response.Content.Headers.ContentDisposition.FileName = "Orders.xlsx";

        return response;
    }

这是ExcelSheet代码

here is the ExcelSheet code

        public byte[] ExcelSheet(FileInfo xlTemplate, string cName, string calcMethod, string username, int cid)
    {
        object[] tempObj = Orders(username, cid);
        List<TradeDetailDTO> tList = new List<TradeDetailDTO>();
        List<TempClass> acctList = new List<TempClass>();
        List<TempClass2> sectorList = new List<TempClass2>();
        tList = tempObj[0] as List<TradeDetailDTO>;
        acctList = tempObj[1] as List<TempClass>;
        sectorList = tempObj[2] as List<TempClass2>;

        #region set column variables

        int colAcctNum = 1;
        int colAcctDesc = 2;
        int colAcctTrdLvl = 5;


        int colCname = 6;
        int rowCname = 15;

        #endregion

        using (var package = new ExcelPackage(xlTemplate))
        {

            var worksheet = package.Workbook.Worksheets["Data"];
            var wkshtFormula = package.Workbook.Worksheets["Formulas"];
            wkshtFormula.Cells[rowCname, colCname].Value = cName;

            package.Save();
            return package.GetAsByteArray();
        }
    }


推荐答案

您必须删除对 .Save()的调用,因为它会关闭pck作为副作用。看到更多信息:

You have to remove the call to .Save() since it will close the pck as a side effect. See this for more info:

Shaman.EPPlus + ASP.NET Core MVC-部分已存在异常

这篇关于WebApi使用EPPlus excel文件下载-打开错误-无法读取的内容-修复的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆