Search code examples
c#.netexcelnpoi

Why do I get reading numeric values as string in excel


I try to read excel file using NPOI library.

Here is the code:

  public void ReadDataFromXL()
        {
            try
            {                
                for (int i = 1; i <= sheet.LastRowNum; i++)
                {
                    IRow row = sheet.GetRow(i);
                    for (int j = 0; j < row.Cells.Count(); j++)
                    {
                        var columnIndex = row.GetCell(j).ColumnIndex;
                        var cell = row.GetCell(j);

                        if (cell != null)
                        {
                            switch (cell.CellType)
                            {
                                case CellType.Numeric:
                                    var val = cell.NumericCellValue; ;

                                    break;
                                case CellType.String:
                                    var str = cell.StringCellValue;

                                    break;
                            }

                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

Here the content of .xlsx file that I try to read:

enter image description here

As you can see column X and column Y are numeric columns. But when I start to read this columns using the code above some of the numeric values in X and Y column have been recognizes by code as string values.

For example in picture above the cell B4 is numeric type but, on cell.CellType it shows String and the value of the string is 31.724732480727\n. '\n' is appended to the value.

Any idea why some numeric values appeared as string and why '\n' appended to the value?


Solution

  • It looks like the datatype of the column is of String, so if you wanted to check for the double datatype (assuming its going to be in the num+'\n' format, you could try the following snippet of code.

            String number = "1512421.512\n";
            double res;
            if (double.TryParse(number.Substring(0, number.Length - 1), out res))
            {
                Console.WriteLine("It's a number! " + res);
            }