MVC3 使用NPOI导出excel
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 }
截图:
MVC3 使用NPOI导出excel的更多相关文章
- NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters
/******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...
- Asp.Net 使用Npoi导出Excel
引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...
- NPOI导出EXCEL 打印设置分页及打印标题
在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置 sheet1.FitToPage = false; 而 ...
- .NET NPOI导出Excel详解
NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, ...
- NPOI导出Excel(含有超过65335的处理情况)
NPOI导出Excel的网上有很多,正好自己遇到就学习并总结了一下: 首先说明几点: 1.Excel2003及一下:后缀xls,单个sheet最大行数为65335 Excel2007 单个sheet ...
- [转]NPOI导出EXCEL 打印设置分页及打印标题
本文转自:http://www.cnblogs.com/Gyoung/p/4483475.html 在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方 ...
- 分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限
大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. ...
- 用NPOI导出Excel
用NPOI导出Excel public void ProcessRequest(HttpContext context) { context.Response.ContentType = " ...
- NPOI导出Excel示例
摘要:使用开源程序NPOI导出Excel示例.NPOI首页地址:http://npoi.codeplex.com/,NPOI示例博客:http://tonyqus.sinaapp.com/. 示例编写 ...
随机推荐
- UVa 1349 (二分图最小权完美匹配) Optimal Bus Route Design
题意: 给出一个有向带权图,找到若干个圈,使得每个点恰好属于一个圈.而且这些圈所有边的权值之和最小. 分析: 每个点恰好属于一个有向圈 就等价于 每个点都有唯一后继. 所以把每个点i拆成两个点,Xi ...
- <三>面向对象分析之UML核心元素之参与者
一:版型 --->在UML里有一个概念叫版型.有些书里也称类型,构造型. --->这个概念是对一个UML元素基础定义的扩展.在同一个元素基础定义的基础上赋予特别 ...
- 调试WEB APP多设备浏览器(转)
方法:adobe shadow \ opera远程调试\ weinre adobe shadow: 我们经常使用Firefox的firebug或者Chrome的开发人员工具进行Web调试页面,J ...
- Linux系统性能监控
系统的性能指标主要包括CPU.内存.磁盘I/O.网络几个方面. 1. CPU性能 (1)利用vmstat命令监控系统CPU 该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看C ...
- UILabel 自适应大小
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStylealloc]init]; paragraphStyle.lineB ...
- 【C++11】 lambda表达式
i.e.int x = 10;int y = 20;int z = [&]{ x = x * x; y = y * y; return x + y;}(); 上面z后面以[]开头的为一个lam ...
- C++ static内容小结
C++中static总结比较好的博客:http://blog.csdn.net/laixingjun/article/details/9139839 http://blog.csdn.net/xiaj ...
- 【原】Storm Local模式和生产环境中Topology运行配置
Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...
- LeetCode题解——Integer to Roman
题目: 将整数转换为罗马数字.罗马数字规则可以参考: 维基百科-罗马数字 解法: 类似于进制转换,从大的基数开始,求整数对基数的商和余,来进行转换. 代码: class Solution { publ ...
- 叉积判断 POJ1696
// 叉积判断 POJ1696 #include <iostream> #include <algorithm> #include <cstring> #inclu ...