导出excel-NPOI

前台调用:

view: <a href='/Admin/NurseUser/Excel' target='_blank'>导出Excel</a>

js: window.location = "/Controller/Excel";

后台代码(控制器):

public FileResult Excel(){
//第一步:(1)以虚拟表的形式获取要导出的数据
DataTable dt_0 = this.Service.Excel(); 
//第一步:(2)若字段复杂,新建虚拟表并设置栏位
DataTable dt_1 = new DataTable();
DataColumn field = null;
field = new DataColumn("标题一"); dt_1.Columns.Add(field); 
//第一步:(3)构建字典,用于字段的渲染
Dictionary<string, string> dic= new Dictionary<string, string>();
if(dic.ContainsKey("键")){//true
dic.Add("键","值");
}
//第一步:(4)遍历dt_0,处理数据插入dt_1
foreach (DataRow row in dt_0.Rows){
DataRow dataRow_1 = dt_1.NewRow();
if (row.ItemArray[3] != null) {
if (dic.ContainsKey(row.ItemArray[3].ToString())){
dataRow_1[0] = dic[row.ItemArray[3].ToString()];
}
} dt_1.Rows.Add(dataRow_1);
}
//第二步:创建excel工作簿、工作表
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");
//第三步:工作表添加栏位
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue("标题一");
row1.CreateCell(1).SetCellValue("标题二");
//第四步:工作表填充数据
for(int i = 0;i<dt_1.Rows.Count;i++){
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);
for (int j = 0; j < dt.Columns.Count; j++){
rowtemp.CreateCell(j - 1).SetCellValue(dt.Rows[i][j].ToString());
}
}
//第六步:写入客户端
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
ms.Seek(0, SeekOrigin.Begin);
return File(ms, "application/vnd.ms-excel", "用户信息.xls");      
}
注意:此代码须在控制器里,在dao层 return File中的File会被当作变量处理,导致报错,其本质是一个类型。
posted @ 2017-03-21 14:33  雷雨天的雷胖子  阅读(297)  评论(0编辑  收藏  举报