Asp.net mvc 4 导出到Excel和ModelBase
我的需求很简单——只需将MVC视图数据表导出到Excel即可。 为了将Razor MVC4视图导出到Excel,我搜索了许多不同的方法,发现这是一个很好的简单方法,但我有点被如何正确实现它所困扰,因为我不理解ModelBase的概念。我找到了几个使用此方法的示例,但无法让它们与我的解决方案一起工作 我试着按照上面的例子,并在下面创建了一个ActionResult,但我不明白我应该用什么来代替下面的“ModelBase”,因为它不喜欢这种语法Asp.net mvc 4 导出到Excel和ModelBase,asp.net-mvc-4,entity-framework-5,export-to-excel,export-to-csv,Asp.net Mvc 4,Entity Framework 5,Export To Excel,Export To Csv,我的需求很简单——只需将MVC视图数据表导出到Excel即可。 为了将Razor MVC4视图导出到Excel,我搜索了许多不同的方法,发现这是一个很好的简单方法,但我有点被如何正确实现它所困扰,因为我不理解ModelBase的概念。我找到了几个使用此方法的示例,但无法让它们与我的解决方案一起工作 我试着按照上面的例子,并在下面创建了一个ActionResult,但我不明白我应该用什么来代替下面的“ModelBase”,因为它不喜欢这种语法 public ActionResul
public ActionResult ExcelExport()
{
List<TrainingSwipe> viewModel = _db.TrainingSwipes
.OrderBy(v => v.SwipeDateTime).ToList();
return View(viewModel);
return new ExcelResult<ModelBase>
(
ControllerContext,
"Export.aspx",
"ExcelExport",
viewModel
);
}
public ActionResult ExcelExport()
{
列表视图模型=_db.TrainingSwipes
.OrderBy(v=>v.SwipeDateTime).ToList();
返回视图(viewModel);
返回新结果
(
ControllerContext,
“Export.aspx”,
“卓越出口”,
视图模型
);
}
最近我在MVC项目中做了很多Excel导出工作,并且一直在使用NPOI的Excel软件包。备选方案是EP Plus,我认为它是在NPOI之上构建的(我自己没有使用过)
至于模型库,我不完全确定那是什么,我怀疑是博主创建的某个抽象类,但这里有一个可能的解决方案
public ActionResult Export()
{
List<MyModel> model = new List<MyModel>();
MemoryStream stream = new MemoryStream();
model = myServiceLayer.GetExportResults();
DataSet ds = new DataSet();
ds.Tables.Add(model.ToDataTable<MyModel>());
try
{
stream = ExcelHelper.CreateExcelSheet(ds, ExcelHelper.ExcelType.Xlsx);
}
catch (Exception error)
{
ModelState.AddModelError("", error);
}
if (!ModelState.IsValid)
{
return View();
}
else
{
string exportName = "myexcelfile.xlsx";
return File(stream.ToArray(), "application/vnd.ms-excel", exportName);
}
}
但我离题了。我构建了一个简单的ExcelHelper类,它将NPOI内容包装在引擎盖下,以执行所有Excel创建,然后您只需将文件作为FileResult返回即可
您可以在此处访问该项目:
如果您查看单元测试,您将看到这是如何工作的。但就在actionresult中使用它而言,这里有一些示例代码供您参考
public ActionResult Export()
{
List<MyModel> model = new List<MyModel>();
MemoryStream stream = new MemoryStream();
model = myServiceLayer.GetExportResults();
DataSet ds = new DataSet();
ds.Tables.Add(model.ToDataTable<MyModel>());
try
{
stream = ExcelHelper.CreateExcelSheet(ds, ExcelHelper.ExcelType.Xlsx);
}
catch (Exception error)
{
ModelState.AddModelError("", error);
}
if (!ModelState.IsValid)
{
return View();
}
else
{
string exportName = "myexcelfile.xlsx";
return File(stream.ToArray(), "application/vnd.ms-excel", exportName);
}
}
public ActionResult导出()
{
列表模型=新列表();
MemoryStream stream=新的MemoryStream();
model=myServiceLayer.GetExportResults();
数据集ds=新数据集();
Add(model.ToDataTable());
尝试
{
stream=ExcelHelper.CreateExcelSheet(ds,ExcelHelper.ExcelType.Xlsx);
}
捕获(异常错误)
{
AddModelError(“,error);
}
如果(!ModelState.IsValid)
{
返回视图();
}
其他的
{
字符串exportName=“myexcelfile.xlsx”;
返回文件(stream.ToArray(),“application/vnd.ms excel”,exportName);
}
}
这是通过执行一些反射将类对象转换为数据集,然后将该数据导出到数据集,该数据集被馈送到excelhelper并将内容输出到流,然后将其作为文件结果传回
我实际上需要推动一个更新,它解决了我发现的几个小问题,但它在当前的形式下工作得非常好。如果您需要更多信息或帮助,请随时联系
编辑:我实际上刚刚将更新推到我的github项目中 Thx,我正在寻找一个简单的解决方案,希望修复几行代码并完成它,但如果没有,我可能最终会研究NPOI和您的解决方案。这不是问题。我自己也在寻找一个简单的解决方案,它不需要我做太多的编码来将数据放入电子表格,因此我的解决方案。
public ActionResult Export()
{
List<MyModel> model = new List<MyModel>();
MemoryStream stream = new MemoryStream();
model = myServiceLayer.GetExportResults();
DataSet ds = new DataSet();
ds.Tables.Add(model.ToDataTable<MyModel>());
try
{
stream = ExcelHelper.CreateExcelSheet(ds, ExcelHelper.ExcelType.Xlsx);
}
catch (Exception error)
{
ModelState.AddModelError("", error);
}
if (!ModelState.IsValid)
{
return View();
}
else
{
string exportName = "myexcelfile.xlsx";
return File(stream.ToArray(), "application/vnd.ms-excel", exportName);
}
}