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/. 示例编写 ...
随机推荐
- Qt之进程间通信(Windows消息)
简述 通过上一节的了解,我们可以看出进程通信的方式很多,今天分享下如何利用Windows消息机制来进行不同进程间的通信. 简述 效果 发送消息 自定义类型与接收窗体 发送数据 接收消息 设置标题 重写 ...
- Servlet和JAVA BEAN 分析探讨
在JSP中调用JAVA类和使用JavaBean有什么区别? 可以像使用一般的类一样使用JavaBean,Bean只是一种特殊的类.特殊在可以通过<jsp:useBean />调用Jav ...
- codeforces 333A - Secrets
题意:保证不能正好配齐n,要求输出可以用的最大硬币数. 注意如果用到某种硬币,那么这种硬币就有无穷多个.所以11=3+3+3+3,12=9+9,13=3+3+3+3+3 #include<cst ...
- ffmpeg显示视频
项目最近需要实现播放视频功能,这个在上家公司就做过.虽然跟之前的场景不一样,有以前的功底还是很快可以解决,事实也确实如此.在使用DShow处理完视频分割与合并后,继续使用DShow显示视频,很快即完成 ...
- windows配置jdk
一.JDK1.6下载 目前JDK最新版本是JDK1.6,到http://java.sun.com/javase/downloads/index.jsp可以下载JDK1.6. 二.JDK1.6安装 JD ...
- Delphi 为什么它提示PCHAR是不安全的类型呢 Unsafe type 'PChar'
DELPHI7已经考虑到了移植到点NET的问题,在点NET里,指针是不安全的.至于为什么有的人遇到,有的人没有遇到,那是因为各人的编译选项不同.在Project菜单下选Options“Compiler ...
- andorid 文字颜色selector的使用
文字颜色selector的使用 创建名称为selector_1的Android项目,在res/color文件夹下创建名称为button_selector_text.xml的文字颜色配置文件,代码如下 ...
- angular+rails集成实战
http://start.jcolemorrison.com/setting-up-an-angularjs-and-rails-4-1-project/ 1. 添加gemgem 'sprockets ...
- extjs form submit 总是执行failure
代码: function createWeekReort() { if (form.getForm().isValid()) { Ext.Msg.confirm("提示", &qu ...
- Selenium2Library系列 keywords 之 _SelectElementKeywords 之 get_selected_list_label(self, locator)
def get_selected_list_label(self, locator): """Returns the visible label of the selec ...