此方式会通过3篇文章将关于Excel的一些日常操作给实现出来,分别为:读取、写入、格式设置等;
本篇要记录的是使用NPOI设置Excel的样式。
先来看下我们的数据源
现在我们要将他导出到Excel中,并设置一些样式,根据以下代码,我们最终代码实现的效果如下:
为什么我要实现这么丑的操作呢?毕竟我想介绍的只是功能。。。
实现功能:
-
使用NPOI的方式实现Excel颜色、字体、公式,图片等操作
开发环境:
开发工具:Visual Studio 2013
.NET Framework版本:4.5
实现代码:
首先需要导入以下命名空间:
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using System.IO;
DataTable dt = dataGridView1.DataSource as DataTable;
//指定excel所在路径
string excelPath = "d:\\2.xlsx";
//以文件流创建excel文件
FileStream fs = new FileStream(excelPath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
//Offic2007以上
IWorkbook workbook = new XSSFWorkbook();
//Offic2007以下
if (excelPath.ToLower().EndsWith(".xls"))
{
workbook = new HSSFWorkbook();
}
//创建一个sheet页
ISheet sheet = workbook.CreateSheet("sheet1");
//创建第一行数据并将表头写进去
IRow rowHead = sheet.CreateRow(0);
for (int j = 0; j < dt.Columns.Count; j++)
{
rowHead.CreateCell(j).SetCellValue(dt.Columns[j].ColumnName);
}
//将数据逐行写入
for (int i = 0; i < dt.Rows.Count; i++)
{
IRow row = sheet.CreateRow(i + 1);
for (int j = 0; j < dt.Columns.Count; j++)
{
row.CreateCell(j).SetCellValue(Convert.ToString(dt.Rows[i][j]));
}
}
//创建样式
ICellStyle style = workbook.CreateCellStyle();
//设置单元格居中
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
//新建一个字体样式对象
IFont font = workbook.CreateFont();
//设置字体大小
font.FontHeightInPoints = 14;
//设置字体加粗
font.IsBold = true;
//设置字体颜色
font.Color = HSSFColor.Red.Index;
style.SetFont(font);
//设置行的高度
rowHead.Height = 800;
//设置列的宽度
sheet.SetColumnWidth(0, 5000);
//设置单元格样式
rowHead.GetCell(2).CellStyle = style;
//设置单元格合并
//CellRangeAddress参数分别为:起始行,结束行,起始列,结束列
//索引从0开始
sheet.AddMergedRegion(new CellRangeAddress(4, 5, 0, 2));
//设置单元格公式
ICell cell2 = sheet.CreateRow(dt.Rows.Count + 1).CreateCell(2);
cell2.CellFormula = "C2+C3";
/*以下代码可判断单元格格式是否为公式
if (rowHead.GetCell(1).CellType == CellType.Formula)
{
//判断单元格值是什么类型
if (HSSFDateUtil.IsCellDateFormatted(rowHead.GetCell(1)))
{
}
}
*/
//读取图片转为byte
Image img = Image.FromFile("d:\\c.png");
MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Png);
byte[] b = ms.ToArray();
int picIndex=workbook.AddPicture(b, PictureType.PNG);
IDrawing patriarch = sheet.CreateDrawingPatriarch();
//在第9行第5列插入大小为 高8行宽6列的图片(索引从0开始)
XSSFClientAnchor anchor = new XSSFClientAnchor
{
Row1 = 8,
Row2 = 16,
Col1 = 4,
Col2 = 10
};
patriarch.CreatePicture(anchor, picIndex);
workbook.Write(fs);
fs.Close(); workbook.Close();
至此,关于NPOI操作Excel的常用功能就差不多了,大家可以尝试下应用到日常办公中,会方便很多我们一些日常繁琐的工作。。。
由简入繁,拿来即用
后续精彩,持续关注
欢迎关注公众号: dotnet编程大全
技术群: 需要进技术群的添加小编微信mm1552923,备注:加群;