尝试使用 epplus 核心和 .net 核心导出到 excel
trying to export to excel with epplus core and .net core
我正在尝试导出到 excel 按钮,当它被点击时我想调用它 api 并下载 excel sheet.
我的控制器代码看起来像这样,老实说我被卡住了,因为我不确定我应该返回什么。我是 .net 核心的新手 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
控制器方法 File(stream,...,...) 为您完成:
return File(stream, contentTypeString, willbeSavedWithThisFileName);
应该可以。我不确定您是否需要重新"wrap" 将您的包裹重新放入内存流
var streamagain = new MemoryStream(package.GetAsByteArray());
(使用您已经编写的 "handrolled" 代码,我会尝试 return StatusCode(200)
作为将您的内容返回给客户端的方式)。
我正在尝试导出到 excel 按钮,当它被点击时我想调用它 api 并下载 excel sheet.
我的控制器代码看起来像这样,老实说我被卡住了,因为我不确定我应该返回什么。我是 .net 核心的新手 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
控制器方法 File(stream,...,...) 为您完成:
return File(stream, contentTypeString, willbeSavedWithThisFileName);
应该可以。我不确定您是否需要重新"wrap" 将您的包裹重新放入内存流
var streamagain = new MemoryStream(package.GetAsByteArray());
(使用您已经编写的 "handrolled" 代码,我会尝试 return StatusCode(200)
作为将您的内容返回给客户端的方式)。