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> ...
随机推荐
- ROS-SLAM仿真-hector
前言:hector_slam可以很好的在空中机器人,手持构图设备及特种机器人中运行. hector_slam不需要订阅里程计信息/odmo消息,而是直接使用激光估算里程计信息,因此,当机器人速度较快时 ...
- Java基础——环境变量(PATH)和类变量(CLASSPATH)
一.环境变量(PATH) 科普下,环境变量不是java的知识,是windows系统的环境变量. 下面请看怎么查看和修改windows的环境变量 在“我的电脑”右键属性进入后 点击“高级系统设置”(如下 ...
- Android 长按识别图中二维码 zxing
#基于 Zxing, 初学Android 代码质量不高 //长按,通过zxing读取图片,判断是否有二维码 bigImage.setOnLongClickListener(new View.OnLon ...
- node.js流复制文件
转自:http://segmentfault.com/a/1190000000519006 nodejs的fs模块并没有提供一个copy的方法,但我们可以很容易的实现一个,比如: var source ...
- call使用场景
在javascript OOP中,定义: function cat(){ } cat.prototype={ food:"fish", say: funct ...
- 优动漫结合Photoshop怎么画草地?
今天继续技法教学~草地的技法,PS教学~但是很简单,都是默认工具,而且是常用工具VS常用设置.你肯定会学会的! 草地教程,就到这里啦!有兴趣的可以尝试画一画哦,想要Get到更多有关优动漫的信息包括软件 ...
- hdu 1080 dp(最长公共子序列变形)
题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G - G ...
- 使用node+mysql进行后端开发
使用koa: koa2是一个类,所以引入koa后,要创建实例化“对象”,才能使用koa内部封装的方法. 设置监听端口: 处理http请求: 1.http请求处理链 A.通过app.use()注册asy ...
- JVM运行原理详解
1.JVM简析: 作为一名Java使用者,掌握JVM的体系结构也是很有必要的. 说起Java,我们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Ja ...
- webpack加载器(Loaders)
加载器(Loaders) loader 是对应用程序中资源文件进行转换.它们是(运行在 Node.js 中的)函数,可以将资源文件作为参数的来源,然后返回新的资源文件. 示例 例如,你可以使用 loa ...