MVC4+EF5+Oracle项目点滴记录(001)将数据库中的数据用NPOI导出生成excel
关于NOPI 2.0在项目中的使用
1.在官网下载 NPOI 文件包 http://npoi.codeplex.com/releases 下载后将NPOI.dll和ICSharpCode.SharpZipLib.dll加载到项目中 最好是全部加载(NPOI.OOXML.dll、NPOI.OpenXml4Net.dll、NPOI.OpenXmlFormats.dll)
2.在三层中的Model层中新建一个类,专门用来处理数据表导成Excel,这里先导出数据库City表中的全部信息 代码如下 (注意自动属性字段要和数据库表中的字段类型保持一致,后面会用到)
1 namespace CheHuBang.MODEL.Params 2 { 3 public class Execl 4 { 5 6 } 7 public class CityExecl 8 { 9 public long CITYID { get; set; } 10 public string CITY { get; set; } 11 public long FATHERID { get; set; } 12 public long GRADEID { get; set; } 13 public string ABBREVIATE { get; set; } 14 } 15 }
3.在数据库City表对应的BLL层中写出cityAdd(),这个方法是通过获得用户选择的目标信息的条目,将期遍历后分别去数据库City表中去获取相对应的数据,再将数据由IQueryable类型转换成List类型再传出去
1 public List<CityExecl> cityAdd(string[] idsstring) 2 { 3 List<CityExecl> list = new List<CityExecl>(); 4 for (int j = 0; j < idsstring.Length; j++) 5 { 6 string str = idsstring[j]; 7 //下面是将IQueryable类型转变成List类型 8 var city = DbSession.CITYRepository.LoadEntities(x => x.CITYID.ToString() == str); 9 var xx = from a in city 10 select new CityExecl 11 { 12 CITYID = a.CITYID, 13 CITY = a.CITY1, 14 FATHERID = a.FATHERID, 15 ABBREVIATE = a.ABBREVIATE, 16 GRADEID = (long)a.GRADEID 17 }; 18 19 list.Add(xx.ToList().FirstOrDefault()); 20 } 21 return list; 22 }
4.返回数据库City表对应的IBLL层中写出cityAdd()方法对应的接口,这样我们就能在City表的Controller中调用这个方法了
1 List<CityExecl> cityAdd(string[] idsstring);
5.现在创建数据库City表对应的CityController。
1 public ActionResult execl() 2 { 3 List<CityExecl> list = new List<CityExecl>(); 4 string ids = Request["strId"]; 5 string[] idsstring = ids.Split(new char[] { ‘,‘ }, StringSplitOptions.RemoveEmptyEntries);//拆字符串 6 //通过用户选择的数据序列到数据库中拿到相应的数据 7 list = CityService.cityAdd(idsstring); 8 //创建工作薄 9 IWorkbook workbook = new XSSFWorkbook(); 10 //创建一个Sheet 括号里面可以为这个Sheet命名 11 ISheet sheet = workbook.CreateSheet(); 12 //创建行和单元格 13 IRow row = sheet.CreateRow(0);//第一行 14 //ICell cell = row.CreateCell(0);//第一行的第一列创建单元格 15 //为第一行创建 栏目 下面是City表的栏目 16 row.CreateCell(0, CellType.String).SetCellValue("CITYID"); 17 row.CreateCell(1, CellType.String).SetCellValue("CITY"); 18 row.CreateCell(2, CellType.String).SetCellValue("FATHERID"); 19 row.CreateCell(3, CellType.String).SetCellValue("ABBREVIATE"); 20 row.CreateCell(4, CellType.String).SetCellValue("GRADEID"); 21 //循环对象集合创建数据列 从第二行开始便利 22 for (int i = 0; i < list.Count; i++) 23 { 24 IRow row2 = sheet.CreateRow(i + 1); 25 row2.CreateCell(0, CellType.String).SetCellValue(list[i].CITYID); 26 row2.CreateCell(1, CellType.String).SetCellValue(list[i].CITY); 27 row2.CreateCell(2, CellType.String).SetCellValue(list[i].FATHERID); 28 row2.CreateCell(3, CellType.String).SetCellValue(list[i].ABBREVIATE); 29 row2.CreateCell(4, CellType.String).SetCellValue(list[i].GRADEID); 30 31 } 32 //项目中应改为相对路径而不是绝对路径(为了信息安全就没全写出来了) 33 string path = @"C:\..\DownLoadFile\CITY信息.xls"; 34 using (FileStream file = new FileStream(path, FileMode.Create)) 35 { 36 workbook.Write(file); 37 } 38 return Content("ok"); 39 //return File(new FileStream(path, FileMode.Open), "application/ms-excel", "信息.xls"); 40 }
6.代码写好后会引用下面的命名空间
1 using NPOI.HSSF.UserModel; 2 using NPOI.SS.UserModel;
7.最后写View层 在toolbar中加入一个生成按钮,生成按钮对应的JS方法
1 function btnExeclDialog() { 2 var rows = $(‘#tt‘).datagrid(‘getSelections‘); 3 if (!rows || rows.length == 0) { 4 //alert("请选择要修改的商品!"); 5 $.messager.alert("提醒", "请选择要导出的数据!", "error"); 6 return; 7 } 8 if ($.messager.confirm("提示", "确定要导出吗?", function (r) { 9 if (r) { 10 var str = ""; 11 for (var i = 0; i < rows.length; i++) { 12 str = str + rows[i].ID + ","; 13 } 14 str = str.substr(0, str.length - 1); 15 $.post("/City/execl", 16 { "strId": str }, 17 function (data) { 18 if (data == "ok") { 19 $.messager.alert("提示信息", "数据导出成功!"); 20 initTablList(); 21 $(‘#tt‘).datagrid(‘clearSelections‘); 22 $(‘#tt‘).datagrid(‘reload‘); 23 } 24 else { 25 $.messager.alert("提示信息", "数据导出失败!"); 26 initTablList(); 27 } 28 }); 29 } 30 })); 31 }
8.完成!在指定文件下生成指定名字的excel
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。