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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。