EPPlus не загружает файл Excel с шаблонами - PullRequest
0 голосов
/ 09 октября 2018

Когда я использую Epplus для экспорта в Excel, он не загружает файл Excel, вот мой код

public ActionResult ExportDataTableToExcel(string searchBox)
{
    FileStream fs = null;
    var fileName = "xxxReport";

    fs = new FileStream(Server.MapPath(@"~/Content/Templates/xxxReport.xlsx"), FileMode.Open, FileAccess.Read);

    var result = new List<xxxReport_Result>();
    using (var db = new xxxEntities())
    {
        if (searchBox != "" && searchBox != null)
        {
            result = db.xxxReport()
                    .Where(r => r.Match.Contains(searchBox)
                    || r.MD.Contains(searchBox)
                    || r.SBU.Contains(searchBox)
                    || r.Project.Contains(searchBox)).ToList();
        }
        else
        {
            result = db.xxxReport().ToList();
        }
    }

    var results = Mapper.Map<List<ReportModel>>(result);

    Debug.WriteLine("End : {0}", DateTime.Now.ToString("HH:mm:ss"));

    using (var excel = new ExcelPackage(fs))
    {
        var workSheet = excel.Workbook.Worksheets.FirstOrDefault();

        int i = 11;
        results.ToList().ForEach(s =>
            {
                int col = 2;
                workSheet.Cells[i, col++].Value = s.NO;
                workSheet.Cells[i, col++].Value = s.Match;
                workSheet.Cells[i, col++].Value = s.MD;
                workSheet.Cells[i, col++].Value = s.SBU;
                workSheet.Cells[i, col++].Value = s.Project;
                workSheet.Cells[i, col++].Value = s.BlockUnit;
                i++;
            });

        Response.Clear();
        string saveAsFileName = string.Format("{0}_{1:d}.xlsx", fileName, DateTime.Now).Replace("/", "-");
        Response.AddHeader("content-disposition", string.Format("attachment;filename={0}", saveAsFileName));
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        Response.BinaryWrite(excel.GetAsByteArray());
        Response.End(); 
    }
    return JavaScript("Export Complete");
}

Когда я нажимаю кнопку экспорта, я ничего не получаю, я пытаюсь отладить, и в коде нет ошибокно когда я использую console.log для проверки результатов, я получаю что-то, что мне нравится в моих результатах.

���ʮ�����O� & � ת����� o����Tҵ��B * ���] �� (S���d�Ŗ��) ��Oe���Ť?p> ^ ����4aπT | ����4��_100

Так я называю функцию

function ExportToExcel() {
        $.post("@Url.Action("ExportDataTableToExcel", "xxx")",
        {
            searchBox1: $("#searchBox1").val(),
            searchBox2: $("#searchBox2").val(),
            searchBox3: $("#searchBox3").val(),
            searchBox4: $("#searchBox4").val()
        }).done(function (result) {
            console.log(result);
        });
    }

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Я исправил это, создав другую функцию для загрузки файла результатов, используя метод "GET"

0 голосов
/ 09 октября 2018

С MVC вы должны держаться подальше от прямого взаимодействия с объектом Response, если в этом нет особой необходимости.Имея это в виду, это должно работать:

public ActionResult ExportDataTableToExcel(string searchBox)
{
    var fileName = "xxxReport";
    byte[] excelContent;

    // *** code that pulls your data ***

    // always try to use a 'using' statement when you can for disposable objects
    using (var fs = new FileStream(Server.MapPath(@"~/Content/Templates/xxxReport.xlsx"), FileMode.Open, FileAccess.Read))
    using (var excel = new ExcelPackage(fs))
    {
        // *** manipulate your worksheet here ***

        excelContent = excel.GetAsByteArray();
    }

    string saveAsFileName = string.Format("{0}_{1:d}.xlsx", fileName, DateTime.Now).Replace("/", "-");
    return File(excelContent, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", saveAsFileName);
}

Функции контроллера MVC возвращают объект ActionResult, от которого наследуются многие другие классы, включая System.Web.Mvc.FileContentResult, то есть то, что возвращает функция File() (этот методвстроен в System.Web.Mvc.Controller)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...