Сгенерируйте таблицу Excel для экспорта с помощью EPPlus.Core - PullRequest
0 голосов
/ 09 апреля 2019

Я хочу создать сервис, который будет генерировать таблицу Excel из моей хранимой процедуры. Я смотрю на https://www.talkingdotnet.com/import-export-excel-asp-net-core-2-razor-pages/, где она работает для бритвенной страницы напрямую, но мне нужно создать службу (на моем бизнес-уровне и предоставить ее контроллеру).

Я столкнулся с проблемой, что в этом уроке возвращено IActionResult из функции:

public async Task<IActionResult> OnPostExport()
{
    //logic
    return File(memory, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", sFileName);
}

Подробнее о режиме см. https://www.talkingdotnet.com/import-export-excel-asp-net-core-2-razor-pages/.

Я пытался написать этот код:

public class ExportService
{      
    private IHostingEnvironment _hostingEnvironment;

    public ExportService(IHostingEnvironment hostingEnvironment)
    {
        _hostingEnvironment = hostingEnvironment;
    }

    public async Task OnPostExport(int year)
    {
        //logic
        return File(memory, "application/vnd.openxmlformats- 
        officedocument.spreadsheetml.sheet", sFileName);
    }

Это не работает, потому что «вернуть файл» - функционал из PageModel, как это работает в учебнике. Я хочу вернуть файл контроллеру из моего сервиса. Какой тип я должен возвращать из моей OnPostExport функции? Я буду благодарен за любую информацию и идеи, которые мне нужны.

1 Ответ

1 голос
/ 10 апреля 2019

Для File это базовый метод из ControllerBase, который вернет FileContentResult.Если вы предпочитаете использовать File, вы можете реализовать код из FileResult вариантов .

ИМО, я бы посоветовал вам вернуть byte[] из public async Task OnPostExport(int year) и затем построить ответ File как

public async Task<byte[]> OnPostExport(int year)
{
    //logic
    return filebytearray;
}


var dt = await _exportService.OnPostExport(1);
return File(dt, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", sFileName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...