//优化后导出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之添加样式、边框和表头的更多相关文章

  1. C#+Aspose.Cells 导出Excel及设置样式 (Webform/Winform)

    在项目中用到,特此记录下来,Aspose.Cells 不依赖机器装没有装EXCEL都可以导出,很方便.具体可以参考其他 http://www.aspose.com/docs/display/cells ...

  2. C# 使用Epplus导出Excel [5]:样式

    C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...

  3. wpf 导出Excel Wpf Button 样式 wpf简单进度条 List泛型集合对象排序 C#集合

    wpf 导出Excel   1 private void Button_Click_1(object sender, RoutedEventArgs e) 2 { 3 4 ExportDataGrid ...

  4. POI通用导出Excel数据(包括样式设计)

    前言 前一段时间我写过通用的导入Excel,前几天也写了导出pdf格式的,还有我之前搞得导出Word,我在之前的博客也都介绍了导出和导入是一个道理,无非是一个获取一个是赋值.昨天有一位同仁看了我的Ex ...

  5. vue2.0 导出Excel表格数据

    1.安装三个依赖包 npm install -S file-saver npm install -S xlsx npm install -D script-loader 2.在项目中创建一个文件夹(比 ...

  6. NPOI导出Excel,添加图片和设置格式,添加条形码

    先上代码 using grproLib; using System; using System.Collections.Generic; using System.Data; using System ...

  7. C# 导出Excel Table td 样式

    <td style="vnd.ms-excel.numberformat:@;"><s:property value="accountCode" ...

  8. HTML导出Excel数据类型转换样式参考

    mso-number-format:"0" NO Decimals mso-number-format:"0/.000" 3 Decimals mso-numb ...

  9. 使用aspose.cell导出excel需要注意什么?

    1.如果导出的数据源是汇总出来的,最好方法是将数据源放到缓存里面,当基本数据源变化的时候,在改变数据2.使用模板导出EXCEL,这样很多样式可以在模板文件里面直接设置,例如:默认打开页签,让列头固定3 ...

随机推荐

  1. cocos2dx中的内存管理方式

    转载:http://www.cocoachina.com/bbs/read.php?tid=195219 今天看了一下cocos2dx的内存管理机制,有些地方不太好理解搞了挺长的时间,现在感觉自己理解 ...

  2. 21、conda下载,安装,卸载

    参考:https://www.cnblogs.com/Datapotumas/p/6293309.html 1.下载 conda下载网址:https://conda.io/miniconda.html ...

  3. SPOJ LCMSUM - LCM Sum

    题意是求: $\sum_{i = 1}^{n}lcm(i, n)$ $= \sum_{i = 1}^{n}\frac{ni}{gcd(i, n)}$ $= n\sum_{i = 1}^{n}\frac ...

  4. 37LCD-TFTLCD原理与配置

    1.TFTLCD驱动原理 简介

  5. 树莓派研究笔记(7)-- lakka 《仙剑奇侠传》的完美移植

    仙剑,这是我玩的第一个电脑游戏.真的太经典,无法超越.原来第一次玩的缺少开场动画,很多地方不明不白的.现在终于我们可以把这个梦想继续到树莓派中. LAKKA是支持DOS模拟器的,所以我们一定要下载DO ...

  6. Bootstrap 的 Collapse

    一.简介 Collapse 插件为 HTML 标签提供折叠.展开行为,依赖 transition.js(bootstrap.js 文件中已包含). 二.实现机制 实现 Collapse 效果需要: 一 ...

  7. Git相关安装包打包下载

    Git相关软件偶尔需要***才能下载,故分享于此 1.Git-2.15.0-64-bit.exe 2.TortoiseGit-2.5.0.0-64bit.msi 3.TortoiseGit-Langu ...

  8. Java50道经典习题-程序38 求字符串长度

    题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度. import java.util.Scanner; public class Prog38 { public stat ...

  9. 《Linux内核设计与实现》读书笔记(八)- 中断下半部的处理

    在前一章也提到过,之所以中断会分成上下两部分,是由于中断对时限的要求非常高,需要尽快的响应硬件. 主要内容: 中断下半部处理 实现中断下半部的机制 总结中断下半部的实现 中断实现示例 1. 中断下半部 ...

  10. .net core webapi +ddd(领域驱动)+nlog配置+swagger配置 学习笔记(1)

    搭建一个.net core webapi项目  在开始之前,请先安装最新版本的VS2017,以及最新的.net core 2.1. 首先创建一个Asp.Net Core Web应用程序 这个应用程序是 ...