• .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

  • 相关阅读:
    读书笔记:Visual Studio DSL工具特定领域开发指南
    OpenTest:教你在自动化脚本中增加选择文件的支持
    MetaModelEngine:域模型定义
    WPF:从WPF Diagram Designer Part 2学习面板、缩略图、框线选择和工具箱
    2010年8月blog汇总:敏捷个人和OpenExpressApp之建模支持
    2010年7月blog汇总:OpenTest、MetaModelEngine和敏捷个人
    101与金根回顾敏捷个人:(69)《幸运的秘密》
    MetaModelEngine:模型存储的概要说明
    故事:用户凭什么跟你走
    MDSF:软件工厂(Software factory)介绍
  • 原文地址:https://www.cnblogs.com/AACgao/p/7510375.html
Copyright © 2020-2023  润新知