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. 转:MVC3系列:~Html.BeginForm与Ajax.BeginForm

    Html.BeginForm与Ajax.BeginForm都是MVC架构中的表单元素,它们从字面上可以看到区别,即Html.BeginForm是普通的表单提交,而Ajax.BeginForm是支持异步 ...

  2. UVA 568 Just the Facts (水)

    题意: 求一个数n的阶乘,其往后数第1个不是0的数字是多少. 思路: [1,n]逐个乘,出现后缀0就过滤掉,比如12300就变成123,继续算下去.为解决爆long long问题,将其余一个数mod, ...

  3. ActionBarSherlock的学习笔记(四) ------------ ActionBarSherlock中的搜索及SearchView的使用

    在使用ActionBarSherlock定义app的头部操作时,会经常看见搜索的动作,本文主要介绍一下搜索是如何实现的. 1. SearchView 是搜索的核心组件,具体介绍请参考Android官方 ...

  4. table中嵌套table,如何用jquery来控制奇偶行颜色

    总是要趁着自己还有记忆的时候,把该记录下来的都记录下来,着实是不敢恭维自己的记性. 相信很多时候,我们前端人员,经常会用到table里面的某个td中还嵌套着table,而这个时候还总要去弄奇偶行的颜色 ...

  5. C# 好用的三层架构,项目直接上手用

    一.项目结构 注意:1.Common类中的引用添加:右键--添加引用--.NET--选择对应的引用 2.各层之间引用互相添加(这个就不必多说了,三层最基础部分)   3.在添加 Oracle 引用时候 ...

  6. 【LeetCode 169】Majority Element

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  7. web自动化框架之一介绍与环境搭建(Selenium+Eclipse+Python)

    看到一篇环境搭建文章,详细又全面,这里就不一一重复了 http://blog.csdn.net/dyllove98/article/details/9390649 其它: 1.框架介绍      整个 ...

  8. Qt使用Cookies对网站操作之Get和POST

    1.添加QNetwork模块: a.Qt Creator中打开.pro文件添加QT+=Network; b.VS_Qt中项目属性中Qt Project Settings中Qmodules中勾选”QNe ...

  9. 解决YUM无法正常工作

    1. 错误发生背景 在进行安装依赖包的时候,能够在YUM源中找到相关的RPM包,但是无法进行下载,在单独进行安装RPM包的时候能够进行安装,报错截图如下: 具体的报错信息如下: Error Downl ...

  10. MDI端口和MDIX端口是什么? 又有什么作用?

    是网线的标准A类接法和B类接法.也就是人们通常所说的交叉网线和直联网线.直联网线就是 白黄 黄 白绿 蓝 白兰 绿 白棕 棕 另一端同样如此.交叉网线就是 另一端的1和3,2和6对调.这样就成了交叉网 ...