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

前言介绍

npoi介绍

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

1.读取excel数据

 public IWorkbook RWorkbook = null;

/// <summary>
/// 获取读取 WorkBook
/// </summary>
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表

/// <summary>
/// 获取表中的Sheet名称
/// </summary>
public List<ISheet> Sheets = null;
/// <summary>
/// 获取所有 Sheet表
/// </summary>
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数据

/// <summary>
/// 获取 Sheet 表数据
/// </summary>
/// <param name="sheet"></param>
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表

/// <summary>
/// 删除其中一个Sheet
/// </summary>
/// <param name="sheetName"></param>
/// <param name="excelPath"></param>
/// <returns></returns>
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 清空指定行数据

/// <summary>
/// 清空 Sheet指定行数据
/// </summary>
/// <param name="rowNum"></param>
/// <param name="sheetName"></param>
/// <param name="excelPath"></param>
/// <returns></returns>
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 修改指定行数据

/// <summary>
/// 修改Sheet行数据
/// </summary>
/// <param name="sheetName"></param>
/// <returns></returns>
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 修改单元格数据

/// <summary>
/// 修改 Sheet单元格数据
/// </summary>
/// <param name="sheetName"></param>
/// <returns></returns>
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

/// <summary>
/// 写入IWorkbook
/// </summary>
public IWorkbook WWorkbook = null;
/// <summary>
/// 获取写入WorkBook
/// </summary>
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文件

// <summary>
/// Table 实体类数据转 表格数据
/// </summary>
/// <param name="excelPath"></param>
/// <returns></returns>
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();
    }
}
  • 15
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S 占占

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值