数据导出:
首先查询出要导出的数据
1、 检查模板文件是否存在
2、 使用NPOI打开模板文件
3、 构建单元格样式
4、 设置标题
5、 填充数据
6、 最后以文件方式返回
完成后然后在视图用 window.open() 调用这个方法就可以了。
代码写法:
1-检查模板文件是否存在
// Server.MapPath 将相对的路径转为实际的物理路径
string templatePath = Server.MapPath("~/Document/ARDataTemplate.xls");
//判断模板是否存在
if (!System.IO.File.Exists(templatePath))
{
//如果不存在,就返回失败信息
return Content(“导出失败,请联系网站管理员”);
}
2.使用文件打开模板文件
FileStream templateStream = System.IO.File.Open(templatePath, FileMode.Open);
2.2-使用NPOI打开模板Excel 得到一个工作簿
NPOI.HSSF.UserModel.HSSFWorkbook excelBookTemplate = new NPOI.HSSF.UserModel.HSSFWorkbook(templateStream);
3-打开模板所在第一个工作表
NPOI.SS.UserModel.ISheet sheet = excelBookTemplate.GetSheetAt(0);
3、构建单元格样式
NPOI.SS.UserModel.ICellStyle style = excelBookTemplate.CreateCellStyle();
//水平垂直居中对齐
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
//设置边框为实线
style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
4、设置标题
if (!string.IsNullOrEmpty(startEndDate))
{
//提取模板标题
NPOI.SS.UserModel.IRow rowTitle = sheet.GetRow(0);
rowTitle.GetCell(0).SetCellValue("订单数据 " + startEndDate);
}
5.填充数据
//for循环遍历查询出的数据 填充Excel单元格
for (int i = 0; i < list.Count(); i++)
{
NPOI.SS.UserModel.IRow row = sheet.CreateRow(index); ;//给sheet添加一行
row.Height = 22 * 20;//设置行高
//设置单元格数据
row.CreateCell(0).SetCellValue(i + 1);
row.CreateCell(1).SetCellValue(list[i].orderNo);
row.CreateCell(2).SetCellValue(list[i].payTime.ToString());
row.CreateCell(3).SetCellValue(list[i].totalPrice.ToString());
row.CreateCell(4).SetCellValue(list[i].agencyFee.ToString());
row.CreateCell(5).SetCellValue(list[i].payMoney.ToString());
row.CreateCell(6).SetCellValue(list[i].userGroup.ToString());
row.CreateCell(7).SetCellValue(list[i].jobNumber.ToString());
row.CreateCell(8).SetCellValue(list[i].PNR.ToString());
//设置单元格样式
for (int j = 0; j < row.Cells.Count; j++)
{
row.GetCell(j).CellStyle = style;
}
index++;
}
6、最后以文件方式返回
//以流的方式返回
string fileName = “订单信息” + DateTime.Now.ToString(“yyyy-MM-dd-HH-mm-ss-ffff”) + “.xls”;
//把Excel转化为流,输出
MemoryStream BookStream = new MemoryStream();//定义内存流
excelBookTemplate.Write(BookStream);//将工作薄写入内存流
//输出之前调用Seek(偏移量,游标位置)方法:获取文件流的长度
BookStream.Seek(0, SeekOrigin.Begin);
最后通过File的方法以文件方式返回
return File(BookStream, “application/vnd.ms-excel”, fileName);