Search code examples
asp.net-coreepplus

NullReference Error while reading xlsx EPPlus Core


I'm trying to upload an excel file with EPPlus. I'ts like my excel file was empty, but it has content inside.

Im getting this error: worksheet.Dimension.Rows = 'worksheet.Dimension.Rows' threw an exception of type 'System.NullReferenceException'

on this line: int rowCount = worksheet.Dimension.Rows;

[HttpPost("Excel")]
    public string UploadExcel(IFormFile file)
    {
        var filePath = Path.GetTempFileName();
        FileInfo excel = new FileInfo(filePath);

        using (ExcelPackage package = new ExcelPackage(excel))
        {
            StringBuilder sb = new StringBuilder();
            ExcelWorksheet worksheet = package.Workbook.Worksheets[file.FileName];

            int rowCount = worksheet.Dimension.Rows;
            int ColCount = worksheet.Dimension.Columns;
            bool bHeaderRow = true;
            for (int row = 1; row <= rowCount; row++)
            {
                for (int col = 1; col <= ColCount; col++)
                {
                    if (bHeaderRow)
                    {
                        sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t");
                    }
                    else
                    {
                        sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t");
                    }
                }
                sb.Append(Environment.NewLine);
            }
            return sb.ToString();
        }

Solution

  • Can you verify that the workshseets are being loaded?

    //examine in the debugger to make sure the worksheet you want is loaded
    var worksheets = package.Workbook.Worksheets.ToList();
    

    If that doesn't work, can you try one of these?

    var worksheet = package.Workbook.Worksheets[0];
    var worksheetFirst = package.Workbook.Worksheets.First();
    

    UPDATE:

    The real error is that you are trying to read a temp file with var filePath = Path.GetTempFileName();. You need to read an actual excel file. For example, you could use Path.GetFullPath("path/to/the/excel/file.xls");