C# 操作Excel文件之NPOI (三)

此方式会通过3篇文章将关于Excel的一些日常操作给实现出来,分别为:读取、写入、格式设置等;

本篇要记录的是使用NPOI设置Excel的样式。

b825ed183d7a9a3c0d0b1c3d98bb69e3.png

先来看下我们的数据源

 4187ced7b3ceab1bdba44bb34ec00885.png

现在我们要将他导出到Excel中,并设置一些样式,根据以下代码,我们最终代码实现的效果如下:

988f6b7241d2ae56f74202d47ef03c18.png

为什么我要实现这么丑的操作呢?毕竟我想介绍的只是功能。。。

实现功能:

    • 使用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,备注:加群;

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值