.NET/C#使用NPOI操作Excel

前言

Asp.net/C#操作Excel最惨的就是环境配置了;使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。

使用方法

先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用。

HSSF适用于2007之前的xls版本,XSSF适用于2007及其之后的xlsx版本。

引用组件

下为引用的解释

Assembly名称 模块/命名空间 说明
NPOI.DLL NPOI.POIFS OLE2/ActiveX文档属性读写库
NPOI.DLL NPOI.DDF 微软Office Drawing读写库
NPOI.DLL NPOI.HPSF OLE2/ActiveX文档读写库
NPOI.DLL NPOI.HSSF 微软Excel BIFF(Excel 97-2003, doc)格式读写库
NPOI.DLL NPOI.SS Excel公用接口及Excel公式计算引擎
NPOI.DLL NPOI.Util 基础类库,提供了很多实用功能,可用于其他读写文件格式项目的开发
NPOI.OOXML.DLL NPOI.XSSF Excel 2007(xlsx)格式读写库
NPOI.OOXML.DLL NPOI.XWPF  Word 2007(docx)格式读写库
NPOI.OpenXml4Net.DLL NPOI.OpenXml4Net OpenXml底层zip包读写库
NPOI.OpenXmlFormats.DLL NPOI.OpenXmlFormats 微软Office OpenXml对象关系库

C#读取Excel方法:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;

         var path = @"C:UsersdaigaoDesktop新建Excel.xls";
             IWorkbook workbook = null;
             try
             {
                 using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
                 {
                     if(path.IndexOf(".xlsx")>0)
                     {
                        workbook = new HSSFWorkbook(fs);
                      }
                     else if(path.IndexOf(".xls")>0)
                     {
                        workbook = new XSSFWorkbook(fs);
                      }
                 }
                 ISheet sheet = workbook.GetSheetAt(0);
                 var row = sheet.LastRowNum;//行数
                 var cell = sheet.GetRow(0).LastCellNum;//第一行有多少列
                 obdata= new object[row, cell];
                 for (int i = 0; i < row; i++)
                 {
                     for (int j = 0; j < cell; j++)
                     {
                         obdata[i, j] = sheet.GetRow(i).GetCell(j);
                     }
                 }
             }
             catch(Exception ex)
             {
                 throw ex;
             }   

C#保存EXcel方法:

using NPOI.HSSF.UserModel; 
using NPOI.SS.UserModel;


        IWorkbook workbook = new HSSFWorkbook();//创建Workbook对象(只能创建2007以前的版本.xls) ISheet sheet = workbook.CreateSheet("hdhd");//创建一个sheet表 HSSFCellStyle headerStyle = (HSSFCellStyle)workbook.CreateCellStyle(); //创建HSSFCellStyle对象(样式) headerStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//表格内容居中 HSSFFont setFont = (HSSFFont)workbook.CreateFont();//创建HSSFFont对象(字体) setFont.FontName = "微软雅黑"; setFont.IsBold = true;//加粗 headerStyle.SetFont(setFont);//字体添加到样式中 HSSFCellStyle allStyle = (HSSFCellStyle)workbook.CreateCellStyle(); allStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; var rows = obdata.GetLength(0);//行数 var cells = obdata.GetLength(1);//列数 for (int i = 0; i < rows; i++)// { IRow row = sheet.CreateRow(i); for (int j = 0; j < cells; j++)// { row.CreateCell(j).SetCellValue(obdata[i,j].ToString());//在行中添加一列并设置列的内容 row.GetCell(j).CellStyle = allStyle;// 给第一行单元格添加样式 if (i==0) row.GetCell(j).CellStyle = headerStyle;// 给第一行单元格添加样式 } } SaveFileDialog dlgSave = new SaveFileDialog(); // 默认文件名 dlgSave.FileName = "新建Excel表格"; // 默认扩展名 dlgSave.DefaultExt = ".xls"; // 默认过滤器 dlgSave.Filter = "Excel表格 (.xls)|*.xls"; // 显示保存对话框 DialogResult result = dlgSave.ShowDialog(); if (result == DialogResult.OK) { string strFileName = dlgSave.FileName; // 实例化一个文件流 using (FileStream streamFile = new FileStream(strFileName, FileMode.Create))           {               workbook.Write(streamFile);               // 清空缓冲区、关闭流               streamFile.Flush();                streamFile.Close();                workbook = null;          }         }

 NPOI 单元格套用公式:

  1、获取公式注意激活模板自动公式

HSSFWorkbook hssfworkbook = new HSSFWorkbook();  
ISheet sheet = hssfworkbook.CreateSheet("Sheet1");  
hssfworkbook.CreateSheet("Sheet2");  
hssfworkbook.CreateSheet("Sheet3");  

//Title  
IRow row = sheet.CreateRow(0);    //创建行对象  
ICell cell = row.CreateCell(0);   //创建单元格对象  

int rIndx=1;
cell.CellFormula = "F" + rIndx + "+G" + rIndx + "+H" + rIndx + "+I" + rIndx + "+J" + rIndx;//单元格公式为:=F1+G1+H1+I1+J1
cell.CellFormula="SUMIF(J6:J78,"语文",D6:D78)";//J列是语文的D列成绩汇总
//模板自动公式需要激活
sheet.ForceFormulaRecalculation = true;

保存方法也可参考:

http://blog.csdn.net/dcrmg/article/details/52356236

原文地址:https://www.cnblogs.com/AACgao/p/7510375.html