C#npoi学习(读操作)

#####前言
读取对应的excel为2013版
使用前需要导入的dll,(百度云可以获得)
在这里插入图片描述
(还有一点要说的,NPoi只能读,往Excel文件中写入东西,然后保存会导致文件损坏,一直没有找到解决的办法,顾往excel写入的方法就没有写了)

//需要导入 
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
--------------------------------------------------------------------------------------------------------------
            ISheet packOutisheet = null;
            FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            XSSFWorkbook xswork = new XSSFWorkbook(fs);//获取excel文档
            
            sheetContent = xswork.GetSheet(sheetName);//获取sheet内容  By sheetName
            sheetContent = xswork.GetSheetAt(sheetIndex);//获取sheet内容  By sheetIndex
            //获取行数
           int rowNum =  sheetName.LastRowNum;
           //获取对应行的列数
           int colNum = sheetName.GetRow(rowIndex).LastCellNum;
            //获取单元格值
             string cellValue = sheetName.GetRow(rowIndex).GetCell(colIndex).ToString();

在读取时候,还有一些问题
1.列上的字母转为列数(百度到的,出处忘了 抱歉,没有链接)

  /// <summary>
        /// 将列字母转换为数字
        /// </summary>
        /// <param name="columnName"> 列名</param>
        /// <returns></returns>
        public static int ToIndex(string columnName)
        {
            if (!Regex.IsMatch(columnName.ToUpper(), @"[A-Z]+")) { throw new Exception("invalid parameter"); }

            int index = 0;
            char[] chars = columnName.ToUpper().ToCharArray();
            for (int i = 0; i < chars.Length; i++)
            {
                index += ((int)chars[i] - (int)'A' + 1) * (int)Math.Pow(26, chars.Length - i - 1);
            }
            return index - 1;
        }

2.在读取的,excel上可能有各种格式,函数等(百度到的,出处忘了 抱歉,没有链接),无法直接获取值

     public string formatCellValue(ICell cell)
        {
            string cellValue = "";
            switch (cell.CellType)
            {
                case CellType.BLANK:
                    cellValue = string.Empty;
                    break;
                case CellType.BOOLEAN:
                    cellValue = cell.BooleanCellValue.ToString();
                    break;
                case CellType.NUMERIC:
                    if (DateUtil.IsCellDateFormatted(cell))//日期
                    {
                        cellValue = cell.DateCellValue.ToString();
                    }
                    else
                    {
                        cellValue = cell.NumericCellValue.ToString();
                    }
                    break;
                case CellType.STRING:
                    cellValue = cell.StringCellValue.Trim();
                    break;
                case CellType.ERROR:
                    cellValue = cell.ErrorCellValue.ToString();
                    break;
                case CellType.FORMULA://公式
                    try
                    {
                        HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);
                        e.EvaluateInCell(cell);
                        cellValue = cell.ToString();
                    }
                    catch
                    {
                        if (DateUtil.IsCellDateFormatted(cell))//日期
                        {
                            cellValue = cell.DateCellValue.ToString("yyyy-MM-dd HH:mm:ss");
                        }
                        else
                        {
                            cellValue = cell.NumericCellValue.ToString();
                        }
                    }
                    break;
                default:
                    cellValue = cell.ToString();
                    break;
            }
            return cellValue;
        }

猜你喜欢

转载自blog.csdn.net/Ericw_wang/article/details/83650188