NPOI的官方教程:http://tonyqus.sinaapp.com/tutorial

此次项目中使用的是NPOI的1.25版本,项目是MVC3,在这里只贴上controller部分的代码:

1 using NPOI.HSSF.UserModel;
2 using NPOI.SS.UserModel;

用户可以在网站上订票,有些景区不具备网络验票的条件,需要我们将订票用户以传真的方式发送给景区。故做此导出功能:分为导出单个景区和一次导出全部景区。

  1  /// <summary>
2 /// //导出excel
3 /// </summary>
4 /// <param name="id">联盟ID</param>
5 /// <param name="param">游玩时间</param>
6 /// <returns></returns>
7 public ActionResult CreateExcel(string id,string param)
8 {
9 try
10 {
11 if (id == "全部")
12 {
13 string[] s = param.Split('-');
14 DateTime dt = new DateTime(int.Parse(s[0]), int.Parse(s[1]), int.Parse(s[2]));
15 List<TSceneryLeagueExportFax> list = tsceneryLeagueBll.getFaxScenery(dt);
16
17 DataSet tempDS = new DataSet();
18 foreach (TSceneryLeagueExportFax tslef in list)
19 {
20 if (tslef.SceneryBookNum == 0)
21 continue;
22 List<TSceneryLeagueExportFax> sceneryleague = tsceneryLeagueBll.getFaxSceneryDetail(tslef.LMID, dt);
23 DataTable dtabel = new DataTable();
24 dtabel.TableName = sceneryleague[0].SceneryName;
25 dtabel.Columns.Add("预订人");
26 //dtabel.Columns.Add("电话");
27 dtabel.Columns.Add("验证码");
28 dtabel.Columns.Add("票种");
29 dtabel.Columns.Add("张数");
30 dtabel.Columns.Add("单价");
31 dtabel.Columns.Add("总价");
32 dtabel.Columns.Add("游玩时间");
33
34 foreach (TSceneryLeagueExportFax tlef in sceneryleague)
35 {
36 if (tlef.TicketsNum == 0)
37 continue;
38 IList TempList = new ArrayList();
39 TempList.Add(tlef.TakeTicketPerson);
40 //TempList.Add(tlef.PhoneCode);
41 TempList.Add(tlef.VerifyCode);
42 TempList.Add(tlef.TicketName);
43 TempList.Add(tlef.TicketsNum);
44 TempList.Add(tlef.DiscountPrice);
45 TempList.Add(tlef.allMonery);
46 TempList.Add(tlef.DateOfVisit.ToString("yyyy-MM-dd"));
47
48 object[] itm = new object[7];
49 //遍历ArrayList向object[]里放数据
50 for (int j = 0; j < TempList.Count; j++)
51 {
52
53 itm.SetValue(TempList[j], j);
54 }
55 //将object[]的内容放入DataTable
56 dtabel.LoadDataRow(itm, true);
57
58 }
59 tempDS.Tables.Add(dtabel);
60 }
61 return File(ExportExecel(tempDS), "application/vnd.ms-excel", "全部景区联盟传真" + param + ".xls");
62 }
63 else
64 {
65 string[] s = param.Split('-');
66 DateTime dt = new DateTime(int.Parse(s[0]), int.Parse(s[1]), int.Parse(s[2]));
67 List<TSceneryLeagueExportFax> list = tsceneryLeagueBll.getFaxSceneryDetail(int.Parse(id), dt);
68 TSceneryLeague tsigle = tsceneryLeagueBll.GetModel(int.Parse(id));//用于获取景区名称,在导出文件时显示
69 DataSet tempDS = new DataSet();
70 if (list.Count > 0)
71 {
72 DataTable dtabel = new DataTable();
73 dtabel.TableName = list[0].SceneryName;
74 dtabel.Columns.Add("预订人");
75 //dtabel.Columns.Add("电话");
76 dtabel.Columns.Add("验证码");
77 dtabel.Columns.Add("票种");
78 dtabel.Columns.Add("张数");
79 dtabel.Columns.Add("单价");
80 dtabel.Columns.Add("总价");
81 dtabel.Columns.Add("游玩时间");
82
83 foreach (TSceneryLeagueExportFax tlef in list)
84 {
85 if (tlef.TicketsNum == 0)
86 continue;
87 IList TempList = new ArrayList();
88 TempList.Add(tlef.TakeTicketPerson);
89 //TempList.Add(tlef.PhoneCode);
90 TempList.Add(tlef.VerifyCode);
91 TempList.Add(tlef.TicketName);
92 TempList.Add(tlef.TicketsNum);
93 TempList.Add(tlef.DiscountPrice);
94 TempList.Add(tlef.allMonery);
95 TempList.Add(tlef.DateOfVisit.ToString("yyyy-MM-dd"));
96
97 object[] itm = new object[7];
98 //遍历ArrayList向object[]里放数据
99 for (int j = 0; j < TempList.Count; j++)
100 {
101
102 itm.SetValue(TempList[j], j);
103 }
104 //将object[]的内容放入DataTable
105 dtabel.LoadDataRow(itm, true);
106
107 }
108 tempDS.Tables.Add(dtabel);
109
110 }
111
112
113
114 return File(ExportExecel(tempDS), "application/vnd.ms-excel", tsigle.SceneryName+param+".xls");
115 }
116 }
117 catch (Exception ex)
118 {
119
120 throw ex;
121 }
122 }

在上边的方法中调用如下的一个方法,此方法可以略做修改用于其他功能的导出

  1 public byte[] ExportExecel(DataSet tempDs)
2 {
3
4 HSSFWorkbook book = new HSSFWorkbook();
5
6 //普通单元格样式
7 ICellStyle cellstyle = book.CreateCellStyle();
8 cellstyle.Alignment = HorizontalAlignment.CENTER; //水平居中
9 cellstyle.VerticalAlignment = VerticalAlignment.CENTER;//垂直居中
10 cellstyle.WrapText = true; //自动换行
11 IFont cellfont = book.CreateFont();
12 cellfont.FontHeightInPoints = 11; //11号字体
13 cellstyle.SetFont(cellfont);
14
15 //头部单元格样式
16 ICellStyle cellheadstyle = book.CreateCellStyle();
17 cellheadstyle.Alignment = HorizontalAlignment.CENTER;
18 cellheadstyle.VerticalAlignment = VerticalAlignment.CENTER;
19 IFont cellheadfont = book.CreateFont();
20 cellheadfont.FontHeightInPoints = 11;
21 cellheadfont.Boldweight =(short)FontBoldWeight.BOLD; //字体加粗
22 cellheadstyle.SetFont(cellheadfont);
23
24
25 //标题单元格样式
26 ICellStyle titlestyle = book.CreateCellStyle();
27 titlestyle.Alignment = HorizontalAlignment.CENTER;
28 titlestyle.VerticalAlignment = VerticalAlignment.CENTER;
29 IFont titlefont = book.CreateFont();
30 titlefont.FontHeightInPoints = 14;
31 titlefont.Boldweight = (short)FontBoldWeight.BOLD; //字体加粗
32 titlestyle.SetFont(titlefont);
33
34
35 int count = tempDs.Tables.Count;
36 for (int i = 0; i < count; i++)
37 {
38 DataTable dt = tempDs.Tables[i];
39 ISheet sheet = book.CreateSheet(dt.TableName);
40 sheet.IsPrintGridlines = true; //打印时显示网格线
41 sheet.DisplayGridlines = true;//查看时显示网格线
42 //sheet.DefaultRowHeightInPoints = 25; 这种默认设置不起作用
43 sheet.SetColumnWidth(0, 20 * 256);//预订人宽度
44 sheet.SetColumnWidth(2, 25 * 256);//票种宽度
45 sheet.SetColumnWidth(6, 13 * 256);//游玩时间宽度
46
47 int rowIndex = 3;
48 int colIndex = 0;
49
50
51
52 IRow row = sheet.CreateRow(0);
53 row.HeightInPoints = 30;
54 ICell title = row.CreateCell(0);
55 string titlevalue = dt.TableName + dt.Rows[0]["游玩时间"]+"订票详情";
56 title.SetCellValue(titlevalue);
57 title.CellStyle = titlestyle;
58 sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0,0,0,6));
59
60 row = sheet.CreateRow(1);
61 row.HeightInPoints = 25;
62 ICell subtitle = row.CreateCell(0);
63 string subtitlevalue = "来自:南北游旅行网 电话:0311-83052118 传真:0311-83058268 移动客服:18633827863";
64 subtitle.SetCellValue(subtitlevalue);
65 subtitle.CellStyle = cellstyle;
66 sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(1, 1, 0, 6));
67
68
69
70 //设置表头
71 row = sheet.CreateRow(2);
72 row.HeightInPoints = 25;
73 foreach (DataColumn col in dt.Columns)
74 {
75
76 ICell cell = row.CreateCell(colIndex);
77 cell.SetCellValue(col.ColumnName);
78 cell.CellStyle = cellheadstyle;
79
80 colIndex++;
81 }
82
83 //导入数据行
84 foreach (DataRow rows in dt.Rows)
85 {
86
87 colIndex = 0;
88 row = sheet.CreateRow(rowIndex);
89 string TicketType = rows["票种"].ToString();
90 if (TicketType.Length <= 12)
91 {
92 row.HeightInPoints = 25;
93 }
94 else
95 {
96 row.HeightInPoints = 50;
97 }
98 foreach (DataColumn col in dt.Columns)
99 {
100 ICell cell = row.CreateCell(colIndex);
101 cell.SetCellValue(rows[col.ColumnName].ToString());
102 cell.CellStyle = cellstyle;
103 colIndex++;
104 }
105 rowIndex++;
106 }
107
108 }
109
110
111 // 写入到客户端
112 System.IO.MemoryStream ms = new System.IO.MemoryStream();
113 book.Write(ms);
114 byte[] b = ms.ToArray();
115 book = null;
116 ms.Close();
117 ms.Dispose();
118 return b;
119 }

截图:

 
 
分类: C#

MVC3 使用NPOI导出excel的更多相关文章

  1. NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters

    /******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...

  2. Asp.Net 使用Npoi导出Excel

    引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...

  3. NPOI导出EXCEL 打印设置分页及打印标题

    在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置  sheet1.FitToPage = false; 而 ...

  4. .NET NPOI导出Excel详解

    NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, ...

  5. NPOI导出Excel(含有超过65335的处理情况)

    NPOI导出Excel的网上有很多,正好自己遇到就学习并总结了一下: 首先说明几点: 1.Excel2003及一下:后缀xls,单个sheet最大行数为65335 Excel2007 单个sheet ...

  6. [转]NPOI导出EXCEL 打印设置分页及打印标题

    本文转自:http://www.cnblogs.com/Gyoung/p/4483475.html 在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方 ...

  7. 分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限

    大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. ...

  8. 用NPOI导出Excel

    用NPOI导出Excel public void ProcessRequest(HttpContext context) { context.Response.ContentType = " ...

  9. NPOI导出Excel示例

    摘要:使用开源程序NPOI导出Excel示例.NPOI首页地址:http://npoi.codeplex.com/,NPOI示例博客:http://tonyqus.sinaapp.com/. 示例编写 ...

随机推荐

  1. css,html命名规则

    css,html命名规则 页头: header 登录条: loginBar 标志: logo 侧栏: sideBar 广告: banner 导航: nav 子导航: subNav 菜单: menu 子 ...

  2. Java EE (14) -- SSH配置

    整合Spring与Struts1的三种方法总结 无论用那种方法来整合,第一步都是要装载spring的应用环境,有三种方式: #1. struts-config.xml <?xml version ...

  3. Thread.sleep() & SystemClock.sleep()

    Thread.sleep()是java提供的函数.在调用该函数的过程中可能会发生InterruptedException异常. SystemClock.sleep()是android提供的函数.在调用 ...

  4. Linq 时间对比陷阱坑

    同样的两个datetime 格式的时间     2013年12月2日 17点29分57秒  

  5. busybox filesystem httpd php-5.5.31 sqlite3 webserver

    /******************************************************************** * busybox filesystem httpd php ...

  6. Svn正确的使用方法

    想必大家现在都比较喜欢使用svn(subversion)完成代码管理了,因为它的开源,轻巧,易用.但是这样一个宝贝如果不知道其正确的用法,也会让我们百思不得其解,甚至耽误项目进度,浪费程序员的心血和结 ...

  7. WAPI

    中国制定的WLAN安全标准WAPI 针对WLAN安全问题,中国制定了自己的WLAN安全标准:WAPI. 与其他无线局域网安全机制(如802.11i)相比,WAPI主要的差别体现在以下几个方面: • 双 ...

  8. xp重装系统后恢复Linux启动

    我的电脑----右键-----属性----高级----启动与恢复故障----设置编辑 [boot loader]timeout=3default=multi(0)disk(0)rdisk(0)part ...

  9. Thrift框架使用C++的一个demo

    Thrift编译器会根据选择的目标语言为server产生服务接口代码,为client产生stubs,参数可以是基本类型和结构体. 代码框架用的Thrift,为了了解结构,学习写了一个thrift的De ...

  10. HDU 5727 Necklace 环排+二分图匹配

    这是从山东大学巨巨那里学来的做法 枚举下黑色球的排列总数是8!,然后八个白球可选的位置与左右两个黑球存不存在关系建图就行 这是原话,具体一点,每次生成环排,只有互不影响的才连边 最后:注重一点,n个数 ...