NPOI 给导出Excel添加简单样式
需求分析:如下图为我之前导出的Excel数据,没有一点样式,标题行不明显,各个列的数据紧凑,查看数据时得手动拉宽每列,故这次要针对以上问题对它进行优化
结果展示:
代码:
/// <summary>
/// 每日所有数据按每个总成一个工作簿导出到excel中
/// </summary>
/// <param name="exportDataList">excel数据内容</param>
/// <param name="fieldInfies">excel表头</param>
/// <returns></returns>
public static HSSFWorkbook createHSSFWorkbook_Day(Dictionary<string, List<T>> exportDataList, List<ExportFieldInfo> fieldInfies)
{
HSSFWorkbook book = new HSSFWorkbook();
try
{
if (exportDataList.Count != )
{
//这段代码为“有数据”情况下的正常处理
foreach (var items in exportDataList)
{
//创建一个名称为“items.Key”的工作簿
ISheet sheet = book.CreateSheet(items.Key);
//创建2行
IRow rowTitle = sheet.CreateRow();
IRow rowtemp;
//设置表头行的行高为20个字符
rowTitle.Height = * ;
//创建单元格样式
HSSFCellStyle CellStyle_Title = (HSSFCellStyle)book.CreateCellStyle();
//创建字体
HSSFFont font_Title = (HSSFFont)book.CreateFont();
font_Title.FontHeight = * ;
font_Title.FontName = "宋体";
font_Title.Color = HSSFColor.Black.Index;
font_Title.Boldweight = (short)FontBoldWeight.Bold;
CellStyle_Title.SetFont(font_Title);
//给工作簿添加表头,设置表头样式及列宽
for (int k = ; k < fieldInfies.Count; k++)
{
rowTitle.CreateCell(k).SetCellValue(fieldInfies.ElementAt(k).DisplayName);
//给每列设置样式
rowTitle.GetCell(k).CellStyle = CellStyle_Title;
//给每列设置列宽
switch (k)
{
case :
sheet.SetColumnWidth(, * );
break;
case :
case :
sheet.SetColumnWidth(k, * );
break;
case :
sheet.SetColumnWidth(, * );
break;
case :
sheet.SetColumnWidth(, * );
break;
case :
sheet.SetColumnWidth(, * );
break;
default:
break;
}
}
//添加数据
for (int j = ; j < items.Value.Count; j++)
{
object tempobj = items.Value[j];
//获取类型
Type type = tempobj.GetType();
List<System.Reflection.PropertyInfo> ps = type.GetProperties().ToList();
//将数据写入sheet各个行
rowtemp = sheet.CreateRow(j + );
for (int k = ; k < fieldInfies.Count; k++)
{
//获取属性值
var value = ps.First(t => t.Name == fieldInfies.ElementAt(k).FieldName).GetValue(tempobj, null);
switch (fieldInfies.ElementAt(k).DataType)
{
case DataTypeEnum.Int:
rowtemp.CreateCell(k).SetCellValue(Convert.ToInt32(value));
break;
case DataTypeEnum.Float:
rowtemp.CreateCell(k).SetCellValue(Convert.ToDouble(value));
break;
case DataTypeEnum.Double:
rowtemp.CreateCell(k).SetCellValue(Convert.ToDouble(value));
break;
case DataTypeEnum.String:
rowtemp.CreateCell(k).SetCellValue(Convert.ToString(value));
break;
case DataTypeEnum.DateTime:
rowtemp.CreateCell(k).SetCellValue(Convert.ToDateTime(value).ToString("yyyy-MM-dd HH:mm:ss.SSS"));
break;
case DataTypeEnum.Date:
rowtemp.CreateCell(k).SetCellValue(Convert.ToDateTime(value).ToString("yyyy-MM-dd"));
break;
default:
break;
}
}
tempobj = null;
ps = null;
}
}
}
else
{
//这段代码为“无数据”情况下的特殊处理
//创建一个名称为“Sheet1”的工作簿
ISheet sheet = book.CreateSheet("Sheet1");
//创建2行
IRow rowTitle = sheet.CreateRow();
IRow rowtemp = sheet.CreateRow();
//设置表头行的行高为20个字符
rowTitle.Height = * ;
//给工作簿添加表头,设置表头样式及列宽
//创建单元格样式
HSSFCellStyle CellStyle_Title = (HSSFCellStyle)book.CreateCellStyle();
//创建字体
HSSFFont font_Title = (HSSFFont)book.CreateFont();
font_Title.FontHeight = * ;
font_Title.FontName = "宋体";
font_Title.Color = HSSFColor.Black.Index;
font_Title.Boldweight = (short)FontBoldWeight.Bold;
CellStyle_Title.SetFont(font_Title);
for (int k = ; k < fieldInfies.Count; k++)
{
rowTitle.CreateCell(k).SetCellValue(fieldInfies.ElementAt(k).DisplayName);
//给每列设置样式
rowTitle.GetCell(k).CellStyle = CellStyle_Title;
//给每列设置列宽
switch (k)
{
case :
sheet.SetColumnWidth(, * );
break;
case :
case :
sheet.SetColumnWidth(k, * );
break;
case :
sheet.SetColumnWidth(, * );
break;
case :
sheet.SetColumnWidth(, * );
break;
case :
sheet.SetColumnWidth(, * );
break;
default:
break;
} }
//给第二行第一列的单元格赋值
rowtemp.CreateCell().SetCellValue("无数据!");
//创建单元格样式
HSSFCellStyle fCellStyle = (HSSFCellStyle)book.CreateCellStyle();
//创建字体
HSSFFont ffont = (HSSFFont)book.CreateFont();
//给字体设置颜色
ffont.Color = HSSFColor.Red.Index;
//给样式添加颜色
fCellStyle.SetFont(ffont);
//给第二行第一列单元格添加样式
rowtemp.GetCell().CellStyle = fCellStyle;
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
return book;
}
NPOI 给导出Excel添加简单样式的更多相关文章
- NPOI导入导出Excel
.net mvc利用NPOI导入导出excel 注意:如何导出的提交方式ajax导出是失效的! 解决方案是:js处理l两个表单的提交 代码: 第一步. 在页面里面加入2个隐藏的iframe, 如下 ...
- .Net core NPOI导入导出Excel
最近在想.net core NPOI 导入导出Excel,一开始感觉挺简单的,后来真的遇到很多坑.所以还是写一篇博客让其他人少走一些弯路,也方便忘记了再重温一遍.好了,多的不说,直接开始吧. 在.Ne ...
- NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中
以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...
- ASP.net中导出Excel的简单方法介绍
下面介绍一种ASP.net中导出Excel的简单方法 先上代码:前台代码如下(这是自己项目里面写的一点代码先贴出来吧) <div id="export" runat=&quo ...
- easyExcel导出excel的简单使用
easyExcel导出excel的简单使用 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定 ...
- 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 ...
- Npoi导入导出Excel操作
之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...
- .net mvc利用NPOI导入导出excel
1.导出Excel :首先引用NPOI包(Action一定要用FileResult) /// <summary> /// 批量导出需要导出的列表 /// </summary> ...
随机推荐
- 关于swift构造方法
switf 中如果遇到这样的错,,,大概错误就是,"必须要调用父类的构造方法",,可是呢,,调用了super.init() 不就是调用了构造方法了吗? 结果上去一查,,结果一名外 ...
- Oracle 复合索引设计原理——前缀性和可选性
前缀性: 复合索引的前缀性是指只有当复合索引的第一个字段出现在SQL语句的谓词条件中时,该索引才会被用到.如复合索引为(ename,job,mgr),只要谓词条件中出现第一个字段ename,就可以用复 ...
- 【转】SQL Server 2008 数据库同步的两种方式 (发布、订阅)
上篇中说了通过SQL JOB的方式对数据库的同步,这一节作为上一节的延续介绍通过发布订阅的方式实现数据库之间的同步操作.发布订阅份为两个步骤:1.发布.2.订阅.首先在数据源数据库服务器上对需要同步的 ...
- Ztree自动触发第一个节点的点击事件
1.代码 $(function () { var setting = { //check属性放在data属性之后,复选框不起作用 //check: { // enable: true //}, dat ...
- Python 接口类或抽象类 反射
# 抽象类或者接口类,制定规范,统一方法名 # # 抽象类或者接口类,制定规范,统一方法名 from abc import ABCMeta,abstractmethod class Payrole(m ...
- js中,实现对键盘按键的监听:
<script> function keyUp(e) { var currKey=0,e=e||event; currKey=e.keyCode||e.which||e.charCode; ...
- 51nod 1576 Tree and permutation(树的重心+dfn序)
乍一看我不会. 先不考虑加点. 先考虑没有那个除\(2\). 考虑每一条边的贡献,假设某一条边把这棵树分成大小为x,y的两个部分. 那么这条边最多可以被使用\(min(x,y)*2\)次(因为有进有出 ...
- [BZOJ1322]Destroying The Graph
题目大意:有一张有向图,对于每个点,有两种操作:1. 删掉它的所有入边2. 删掉它的所有出边对每个点的每个操作均有不同的价值.求使得图上没有边的最小价值.解题思路:考虑把点拆成入点和出点,然后就是二分 ...
- [luogu1772 ZJOI2006] 物流运输 (最短路 线性dp)
题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...
- jquery获得url的get参数
只是用了第一种方法,简单好用直接传入想要获取的参数名,即可返回参数值 function GetQueryString(name) { var reg = new RegExp("( ...