试图用epplus核心和.net核心导出为ex​​cel

我试图做一个导出到excelbutton,当它打到我想调用这个API并下载一个Excel表。

我的控制器代码看起来像这样,我诚实卡住,因为我不确定我应该回来。 我对.net core api很抱歉

[Route("api/excel")] public class ExportToExcel : Controller { private readonly ScadaContext _context; public ExportToExcel(ScadaContext context) { _context = context; } // GET: api/values [HttpGet] public ActionResult GetExcelMainView() { var query = _context.Main_View.Where(x => !x.MeterId.StartsWith("HOGC")); List<Object[]> MainViewList = new List<Object[]>(); foreach(var p in query) { MainViewList.Add(new Object[] { "Battery Voltage", p.BatteryVoltage }); } MemoryStream stream = new MemoryStream(); using (ExcelPackage pck = new ExcelPackage(stream)) { ExcelWorksheet ws = pck.Workbook.Worksheets.Add("MainView"); ws.Cells["A1"].LoadFromArrays(MainViewList); Response.Clear(); Response.Headers.Add("content-disposition", "attachment; filename=Clients.xlsx"); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; var bytes = pck.GetAsByteArray(); Response.Body.WriteAsync(bytes, 0, bytes.Length); } } } 

最简单的方法是使用FileResult子查询之一,如FileStreamResult

控制器方法文件(stream,…,…)为您做:

 return File(stream, contentTypeString, willbeSavedWithThisFileName); 

应该只是工作。 我不确定是否必须重新将包装重新“包装”到内存中

 var streamagain = new MemoryStream(package.GetAsByteArray()); 

(用你已经写好的“手卷”代码,我会试着return StatusCode(200)作为让你的内容回到客户端的方式)。

Interesting Posts