c#:使用NPOI操作excel文件

首先NPOI是开源的POI项目的.NET版,可以使用读写Excel,Word,PPT等Office文件。
在使用npoi时,需要声明

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

对象和方法

IWorkbook
	 		该接口用于操作excel工作簿的一个接口,主要有两个实现
		 		HSSFWorkbook : 用于读取excel2007版本以下的xls文件
			 	XSSFWorkbook : 用于读取.xlsx 文件		
			主要方法:
				CreateSheet()  : 创建一个 工作表
				GetSheetAt()   : 根据索引或名称获取工作表对象
ISheet :
			excel工作表对象
			主要属性:
				LastRowNum : 最后一行的索引
				FirstRowNum: 第一行的索引
			主要方法:
				GetRow(int index) : 根据索引获取一行
				CreateRow(int index) : 创建一个数据行
IRow :
			数据行对象
			主要方法
				CreateCell(int index) : 指定索引创建一个单元格
				GetCell(int index) : 获取单元格
ICell:
			单元格对象
			主要方法
				SetCellValue(string value) : 设置单元格的值
				ToString()  : 获取该单元格填充的内容

具体实例

简单操作excel文件

   public void ExcelOp(string excelPath)
        {
            IWorkbook workbook=null;
            string fileExt = Path.GetExtension(excelPath).ToLower();
            if (fileExt == ".xlsx")
            {
              
                    workbook = new XSSFWorkbook();//代表Xlsx文件

            } 
            else if (fileExt == ".xls") 
            {
                workbook = new HSSFWorkbook();//代表xls文件
            } 
            else { 
                workbook = null; 
            }
            if(workbook == null) 
            { 
                return;
            }

            ISheet sheet =  workbook.CreateSheet("Sheet1");//写入sheet页,至少有一页


            int iColSum = vSrcLineList.Count() - 1;//垂直直线列表个数
            int iRowSum = hSrcLineList.Count() - 1;//水平直线列表个数
            for(int i = 0;i<iRowSum;i++)
            {
                IRow row = sheet.CreateRow(i);//代表含义

                
                for(int j = 0;j<iColSum;j++)
                {
                    ICell cell = row.CreateCell(j);
                    
                    cell.SetCellValue("");           
                }
            }
            //模板带入完善
                        for (int i = 0; i < iRowSum; i++)
                        {
                            for (int j = 0; j < iColSum; j++)
                            {
                                ICell cell = (ICell)sheet.GetRow(i).GetCell(j);
                             
                            }
                        }
                            foreach (KeyValuePair<int, CombinTable> OneCombin in fact_CombinDic)//循环文本字典集
                            {
                                if (OneCombin.Value.iStartRow >= iRowSum || OneCombin.Value.iStartCol >= iColSum)
                                {
                                    continue;//iStartRow代表开始的行号 如果开始的行号大于定义的水平直线数,或者开始列号大于垂直直线数则返回
                                }
                                ICell cell = sheet.GetRow(OneCombin.Value.iStartRow).GetCell(OneCombin.Value.iStartCol);//创建单元格,此时行列为OneCombin.Value.iStartRow和OneCombin.Value.iStartCol)

                                if (textDstDic.ContainsKey(OneCombin.Key))//判断key值是否存在,如果存在则
                                {
                                    cell.SetCellValue(textDstDic[OneCombin.Key].m_Text.Trim());   //导出的时候,在前面加上一个单引号就行了,这就是文本格式的了。
                                }
                                CellRangeAddress region = new CellRangeAddress(OneCombin.Value.iStartRow, OneCombin.Value.iEndRow, OneCombin.Value.iStartCol, OneCombin.Value.iEndCol);
                                sheet.AddMergedRegion(region);//将新的单元格覆盖已有的单元格
                            }
            
            //转为字节数组  
            MemoryStream stream = new MemoryStream();
            workbook.Write(stream);
            var buf = stream.ToArray();

            //保存为Excel文件  
            using (FileStream fs = new FileStream(excelPath, FileMode.Create, FileAccess.Write))
            {
                fs.Write(buf, 0, buf.Length);
                fs.Flush();
            }

        }   

选中表格信息导出

 public void ExportSelToExcel(bool bX = false)
        {
            LSTable OneTable = new LSTable();

            _iTextKey = 0;
            //2019-05-06
            foreach (KeyValuePair<ulong, RenderedEntityInfo> OnePair in SelectCADDic)
            // //循环keyvalue值 选中的 CAD图像字典 key 为 图形的  ObjectID
            {
                SetObjToTable(OnePair.Value, OneTable, bX);// 将cad对象进行分类整理
            }


            OneTable.GetTableLines();
            if(!OneTable.DealGetAllRec())//获取最小矩形为为空,则返回
            {
                return;
            }
            OneTable.DealText(bX);//将原始列表与矩形列表组合并组合文字
            SaveFileDialog pExcelOpenDG = new SaveFileDialog();
            pExcelOpenDG.Filter = "Excel(*.xlsx)|*.xlsx|所有文件|*.*";//设置文件类型
            pExcelOpenDG.ShowDialog();
            string ExcelfilePath = pExcelOpenDG.FileName;//将文件名字赋值给ExcelfilePath
            if (bX)//如果为true,则
            {
                OneTable.ExcelOpPOS(ExcelfilePath);
            }
            else
            {
                OneTable.ExcelOp(ExcelfilePath);
            }
        }

在事件里导出excel表格

private void 选中表格导出ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        viewControl.ExportSelToExcel();
    }
  
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐