NPOI2.0导出excel之添加样式、边框和表头
//优化后导出excel
public System.IO.Stream ExcelStream(string search) //
{
var orderBusiniss = Containers.ObjectContainer.CreateObject<IOrderBusiness>();
var list = orderBusiniss.GetExcel(search); NPOI.HSSF.UserModel.HSSFWorkbook hssfworkbook = new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.ISheet sheet1 = hssfworkbook.CreateSheet("生产计划"); //添加标题头
sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 13));
NPOI.SS.UserModel.IRow rowTitle = sheet1.CreateRow(0);
rowTitle.Height = 30 * 20;//设置行高
var cellTitel = rowTitle.CreateCell(0); //给标题头添加格式
NPOI.SS.UserModel.ICellStyle styleTitle = hssfworkbook.CreateCellStyle();
styleTitle.Alignment = HorizontalAlignment.Center;//单元格水平居中
IFont fontTitle = hssfworkbook.CreateFont();//新建一个字体样式对象
fontTitle.Boldweight = short.MaxValue;//设置字体加粗样式
fontTitle.FontHeightInPoints = 16;//设置字体大小
styleTitle.SetFont(fontTitle);//使用SetFont方法将字体样式添加到单元格样式中
cellTitel.CellStyle = styleTitle; cellTitel.SetCellValue(ApplicationContext.Current.CompanyName + "公司生产计划单"); //通过反射得到需要导出的属性
Type orderExcel = typeof(OrderToExcel);
PropertyInfo[] ps = orderExcel.GetProperties();
string[] title = new string[] {
"序号",
"生产时间" ,
"订单号",
"业务员",
"工程名称",
"建筑单位",
"施工部位",
"产品信息",
"特殊要求",
"方量(M3)",
"下单时间",
"联系人",
"联系电话",
"备注",
};
//添加行头
NPOI.SS.UserModel.IRow rowHeader = sheet1.CreateRow(1); //公共样式:加边框
NPOI.SS.UserModel.ICellStyle style = hssfworkbook.CreateCellStyle();
style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
style.Alignment = HorizontalAlignment.Center; NPOI.SS.UserModel.ICellStyle styleHeader = hssfworkbook.CreateCellStyle();
styleHeader.CloneStyleFrom(style);//克隆公共的样式
styleHeader.Alignment = HorizontalAlignment.Center;//单元格水平居中
IFont fontHeader = hssfworkbook.CreateFont();//新建一个字体样式对象
fontHeader.Boldweight = short.MaxValue;//设置字体加粗样式
styleHeader.SetFont(fontHeader);//使用SetFont方法将字体样式添加到单元格样式中 for (int i = 0; i < ps.Length + 1; i++)
{
var cellHeard = rowHeader.CreateCell(i);
cellHeard.CellStyle = styleHeader;
cellHeard.SetCellValue(title[i]);
} if (list != null)
{
//通过序列号,得到需要导出的字段
List<OrderToExcel> listExcel = list.ToObjectList<Order, OrderToExcel>();
//保存列集合的属性信息数组
PropertyInfo[] oProps = null;
for (int i = 0; i < listExcel.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 2); var cellNum = rowtemp.CreateCell(0, CellType.Numeric);
cellNum.CellStyle = style;
cellNum.SetCellValue(i + 1);
oProps = ((Type)listExcel[i].GetType()).GetProperties();
for (int j = 0; j < oProps.Length; j++)
{
Type colType = oProps[j].PropertyType;//得到属性的类型
var value = oProps[j].GetValue(listExcel[i]);//得到属性的值
var cell = rowtemp.CreateCell(j + 1);
cell.CellStyle = style;
cell.SetCellValue(value == null ? "" : value.ToString());
}
} } //自动调节行宽度
for (int i = 0; i < 15; i++)
sheet1.AutoSizeColumn(i); System.IO.MemoryStream file = new System.IO.MemoryStream();
hssfworkbook.Write(file);
file.Seek(0, System.IO.SeekOrigin.Begin); return file;
} public class OrderToExcel
{
public Nullable<System.DateTime> ProductionTime { get; set; }
public string Code { get; set; }
public string BSalesman { get; set; }
public string ProjectName { get; set; }
public string ConstructionUnit { get; set; }
public string ConstructionSite { get; set; }
public string ProductName { get; set; }
public string WP { get; set; }
public Nullable<decimal> Number { get; set; }
public Nullable<System.DateTime> CreationTime { get; set; }
public string ContactPerson { get; set; }
public string ContactPhone { get; set; }
public string Remarks { get; set; }
}
之前做了导出excel功能,没有样式比较难看。最近优化了下,NPOI版本为最新版本2.0.4.1版本
优化添加:
1.添加了标题。
2.通过对象的属性来导出excel,表头添加也比较容易点。
NPOI2.0导出excel之添加样式、边框和表头的更多相关文章
- C#+Aspose.Cells 导出Excel及设置样式 (Webform/Winform)
在项目中用到,特此记录下来,Aspose.Cells 不依赖机器装没有装EXCEL都可以导出,很方便.具体可以参考其他 http://www.aspose.com/docs/display/cells ...
- C# 使用Epplus导出Excel [5]:样式
C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...
- wpf 导出Excel Wpf Button 样式 wpf简单进度条 List泛型集合对象排序 C#集合
wpf 导出Excel 1 private void Button_Click_1(object sender, RoutedEventArgs e) 2 { 3 4 ExportDataGrid ...
- POI通用导出Excel数据(包括样式设计)
前言 前一段时间我写过通用的导入Excel,前几天也写了导出pdf格式的,还有我之前搞得导出Word,我在之前的博客也都介绍了导出和导入是一个道理,无非是一个获取一个是赋值.昨天有一位同仁看了我的Ex ...
- vue2.0 导出Excel表格数据
1.安装三个依赖包 npm install -S file-saver npm install -S xlsx npm install -D script-loader 2.在项目中创建一个文件夹(比 ...
- NPOI导出Excel,添加图片和设置格式,添加条形码
先上代码 using grproLib; using System; using System.Collections.Generic; using System.Data; using System ...
- C# 导出Excel Table td 样式
<td style="vnd.ms-excel.numberformat:@;"><s:property value="accountCode" ...
- HTML导出Excel数据类型转换样式参考
mso-number-format:"0" NO Decimals mso-number-format:"0/.000" 3 Decimals mso-numb ...
- 使用aspose.cell导出excel需要注意什么?
1.如果导出的数据源是汇总出来的,最好方法是将数据源放到缓存里面,当基本数据源变化的时候,在改变数据2.使用模板导出EXCEL,这样很多样式可以在模板文件里面直接设置,例如:默认打开页签,让列头固定3 ...
随机推荐
- sql基本查询语句练习
student(S#,Sname,Sage,Ssex) 学生表 S#:学号: Sname:学生姓名:Sage:学生年龄:Ssex:学生性别 Course(C#,Cname,T#) 课程表 ...
- Select2下拉选项库 部分积累
用了这么久的Select2插件,也该写篇文章总结总结. 在我的印象里Select2有2个版本,最新版本有一些新的特性,并且更新了一下方法参数,比最初版本要好看一些,本文针对新版本. 官网:http:/ ...
- php学习笔记-POST和GET的区别
POST和GET都可以用来提交数据. POST方法提交的数据在浏览器的地址栏是不可见的,当然利用一些工具是可以看到的,而GET方法提交的数据在地址栏是可见的.两者比较,POST更安全一点. POST方 ...
- Java之IO流学习总结
流:可以理解为数据的流动,就是一个数据流,IO流最终要以对象来体现 流的分类: 按照流的方向:输入流和输出流 (输入流只能进行读操作,输出流只能进行写操作) 按照处理数据的不同:字节 ...
- rest-framework组件 之 视图三部曲
浏览目录 使用混合(mixins) mixin类编写视图 使用通用的基于类的视图 viewsets.ModelViewSet 视图三部曲 使用混合(mixins) from rest_framewor ...
- 前端学习01-06URL
URL(Uniform Resource Locator) 统一资源定位 URL的基本组成:协议,主机名,端口号,资源名 例如: http://www.sina.com:80/index.html 相 ...
- 数据结构_sfdg(小F打怪)
问题描述 小 F 很爱打怪, 今天因为系统 bug, 他提前得知了 n 只怪的出现顺序以及击倒每只怪得到的成就值 ai. 设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒钟出现一只新怪且没被击倒 ...
- C#中 ACCESS数据库常用操作语句...容易出错的地方(DateTime类型)
这次在C#编程过程中,第一次用到了ACCESS数据库,重点涉及到时间类型,整数类型.是否类型....;遇到了许多困难,就把这些整理了下来,与大家分享. 一.Insert语句的基本格式: INSERT ...
- c# 省市区联动
http://www.matrixkey.com.cn/blog/article.asp?id=427 建议楼主去这里看看:http://pagetalks.com/2010/03/22/jquery ...
- 开启VS的JavaScript调试
前提条件,设置我们的IE 去掉勾,即启用调试然后再JS代码片段中输入debugger.注意:如果IE开启了F12调试面板, VS是不会捕获JS代码片段中的debugger断点.