NPOI对Excel数据的读取删除修改写入

文章目录

  • 前言介绍
    • npoi介绍
  • 1.读取excel数据
    • 1.1 读取sheet表
    • 1.2 获取sheet数据
  • 2.删除excel
    • 2.1 删除sheet表
    • 2.2 清空指定行数据
  • 3.修改excel数据
    • 3.1 修改指定行数据
    • 3.2 修改单元格数据
  • 4.写入excel
    • 4.1 创建WorkBook
    • 4.2 写入excel文件

前言介绍

npoi介绍

NPOI. NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。. NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。.

1.读取excel数据

 public IWorkbook RWorkbook = null;

/// 
/// 获取读取 WorkBook
/// 
public void GetReadWorkbook(string excelPath)
{
     
    // 获取扩展名
    string _extensionName = System.IO.Path.GetExtension(excelPath);
    // 文件流
    FileStream _fs= new FileStream(excelPath, FileMode.Open, FileAccess.ReadWrite);
    // 把xls写入workbook中 2003版本
    if (_extensionName .Equals(".xls"))
    {
     
        RWorkbook = new HSSFWorkbook(_fs);
    }
    // 把xlsx 写入workbook中 2
    else if (_extensionName .Equals(".xlsx"))
    {
     
        RWorkbook = new XSSFWorkbook(_fs);
    }
    else
    {
     
        RWorkbook = null;
        Console.WriteLine("此文件非excel文件,无法读取数据");
    }
    _fs.Close();
}

1.1 读取sheet表

/// 
/// 获取表中的Sheet名称
/// 
public List<ISheet> Sheets = null;
/// 
/// 获取所有 Sheet表
/// 
public void GetSheets()
{
     
    // 获取表
    Sheets = new List<ISheet>();
    var _sheetCount = RWorkbook.NumberOfSheets;
    for (int i = 0; i < _sheetCount; i++)
    {
     
        Sheets.Add(RWorkbook.GetSheetAt(i));
    }
}

1.2 获取sheet数据

/// 
/// 获取 Sheet 表数据
/// 
/// 
private void GetSheetData(ISheet sheet)
{
     
    IRow _row;
	//从第一行开始获取数据
    for (int i = 0; i <= sheet.LastRowNum; i++)
    {
     
        // 获取具体行
        _row= sheet.GetRow(i);
        if (_row!= null)
        {
     
            // 获取行对应的列数
            var _column = _row.LastCellNum;
            for (int j = 0; j < _column; j++)
            {
     
                //  获取某行某列对应的单元格数据
                var _cellValue = _row.GetCell(j).ToString();      
                // 4. 输出单元格数据        
               Console.Wlite(_cellValue+" ");
            }
            // 换行
            Console.WliteLine();
        }
    }
}

2.删除excel

2.1 删除sheet表

/// 
/// 删除其中一个Sheet
/// 
/// 
/// 
/// 
public bool RemoveOneSheet(string sheetName, string excelPath)
{
     
    // 创建文件流
    FileStream _fsWrite = new FileStream(excelPath, FileMode.Open, FileAccess.Write);
    try
    {
     
        // 1. 通过Sheet名字查找Sheet下标
        var _sheetIndex = RWorkbook.GetSheetIndex(sheetName);
        if (_sheetIndex >= 0)
        {
     
            // 2. 通过Sheet下标移除 Sheet
            RWorkbook.RemoveSheetAt(_sheetIndex);
            // 3. 对 Workbook 的修改写入文件流,对文件进行相应操作
            RWorkbook.Write(_fsWrite);
            return true;
        }
        else{
     
        	return false;
        }
    }

2.2 清空指定行数据

/// 
/// 清空 Sheet指定行数据
/// 
/// 
/// 
/// 
/// 
public bool EmptySheetRow(int rowNum, string sheetName, string excelPath)
{
     
    FileStream _fsWrite = new FileStream(excelPath, FileMode.Open, FileAccess.Write);
    try
    {
     
    	1. 通过Sheet名 获取对应的 ISheet 
        ISheet _sheet= RWorkbook.GetSheet(sheetName);
        if (_sheet != null)
        {
     
        	// 2. 定位到要删除的指定行
            IRow _row = _sheet.GetRow(RowNum - 1);
            if (_row != null)
            {
     
                // 3. 清空行数据
                _sheet.RemoveRow(_row);
                // 4. 对 Workbook 的修改写入文件流,对文件进行相应操作;
                RWorkbook.Write(_fsWrite);
                return true;
            }
        }
        else
        {
     
            new Exception("This the Sheet does not exist");
          	return false;
        }
    }
    catch (Exception ex)
    {
     
        throw ex;
    }
    finally
    {
     
        _fsWrite.Close();
    }
}

3.修改excel数据

3.1 修改指定行数据

/// 
/// 修改Sheet行数据
/// 
/// 
/// 
private void UpdateSheet(string sheetName, string excelPath,int rowCount)
{
     
    // 创建文件流
    FileStream _fsWrite = new FileStream(excelPath, FileMode.Open, FileAccess.Write);
    try
    {
     
    	// 1. 通过Sheet名 获取对应的ISheet--其中 RWorkbook 为读取Excel文档时获取
        var _sheet = RWorkbook.GetSheet(sheetName);
        // 2. 获取行对应的列数
        int _column = _sheet.GetRow(rowCount).LastCellNum;
        for (int j = 0; j < _column ; j++)
        {
     
            // 3. 获取某行某列对应的单元格数据
            var _sheetCellValue = _sheet.GetRow(rowCount).GetCell(j);
            // 4. 向单元格传值,以覆盖对应的单元格数据
            _sheetCellValue.SetCellValue(_sheetCellValue + "Update");
        }
        // 5. 对 Workbook 的修改写入文件流,对文件进行相应操作
        RWorkbook.Write(fsWrite);
    }
    catch (Exception ex)
    {
     
        throw ex;
    }
    finally
    {
     
    	// 6. 关闭文件流
        _fsWrite.Close();
    }
}

3.2 修改单元格数据

/// 
/// 修改 Sheet单元格数据
/// 
/// 
/// 
private void UpdateSheet(string sheetName, string excelPath)
{
     
    // 创建文件流
    FileStream _fsWrite = new FileStream(excelPath, FileMode.Open, FileAccess.Write);
    try
    {
     
    	// 1. 通过Sheet名 获取对应的ISeet--其中 ReadWorkbook 为读取Excel文档时获取
        var _sheet = RWorkbook.GetSheet(sheetName);
        // 2. 获取行数
        int _rowCount = _sheet.LastRowNum;
        for (int i = 0; i < _rowCount; i++)
        {
     
            // 3. 获取行对应的列数
            int _columnount = _sheet.GetRow(i).LastCellNum;
            for (int j = 0; j < _columnount; j++)
            {
     
                // 4. 获取某行某列对应的单元格数据
                var _sheetCellValue = _sheet.GetRow(i).GetCell(j);
                // 5. 向单元格传值,以覆盖对应的单元格数据
                sheetCellValue.SetCellValue(_sheetCellValue + "Update");
            }
        }
        // 6. 对 Workbook 的修改写入文件流,对文件进行相应操作
        RWorkbook.Write(fsWrite);
    }
    catch (Exception ex)
    {
     
        throw ex;
    }
    finally
    {
     
    	// 7. 关闭文件流
        _fsWrite.Close();
    }
}

4.写入excel

4.1 创建WorkBook

/// 
/// 写入IWorkbook
/// 
public IWorkbook WWorkbook = null;
/// 
/// 获取写入WorkBook
/// 
public void GetWriteWorkbook(string excelPath)
{
     
    // 获取扩展名
    string _extensionName = System.IO.Path.GetExtension(excelPath);
    // 把xls写入workbook中
    if (_extensionName .Equals(".xls"))
    {
     
        WWorkbook = new HSSFWorkbook();
    }
    // 把xlsx 写入workbook中
    else if (_extensionName .Equals(".xlsx"))
    {
     
        WWorkbook = new XSSFWorkbook();
    }
    else
    {
     
        WWorkbook = null;
    }
}

4.2 写入excel文件

// 
/// Table 实体类数据转 表格数据
/// 
/// 
/// 
private void TableDataToCell(string excelPath)
{
     
    FileStream _fsWrite = new FileStream(excelPath, FileMode.Create, FileAccess.Write);
    try
    {
     
    	// 1. 在WriteWorkbook 上添加名为 sheetDemo 的数据表
        ISheet _sheet = WWorkbook.CreateSheet("sheetDemo ");
        // 2. 定义行数
        var _rowCount = 8;
        // 3. 定义列数
        int _columnount = 8;

        for (int i = 0; i < _rowCount; i++)
        {
     
        	// 4. 创建行
            IRow  _row = _sheet.CreateRow(i);
            for (int j = 0; j < _columnount; j++)
            {
     
            	// 5. 创建某行某列对应的单元格
                 ICell _cell = _row.CreateCell(j);
                // 6. 向单元格添加值
                _cell.SetCellValue($"第{
       i}行 第{
       j}列");
                // 添加表格样式
                _cell.CellStyle = ExpandFliePath.OtherRowStyle();
            }
        }
        //7. 将表单写入文件流
        WWorkbook.Write(_fsWrite);
    }
    catch (Exception ex)
    {
     
        throw ex;
    }
    finally
    {
     
    	// 关闭文件流
        _fsWrite.Close();
    }
}

你可能感兴趣的:(C#,c#)