I know this is an old question with a great answer but this page came up high on google's results for "import xlsx c#" so I wanted to add a more modern and simpler way to read xls/xlsx data using the NPOI library. I want to make sure new c# developers know that there is an easier way to import Excel data rather than using ado.net.
I use a combination of NPOI and Npoi.Mapper (from donnytian: https://github.com/donnytian/Npoi.Mapper) to import Excel files with ease. Add a nuget reference to NPOI and Npoi.Mapper and then you can import xls/xlsx data using strongly typed classes that correlate directly to the columns that you want to import.
```using System.IO;
using System.Linq;
using Npoi.Mapper;
using Npoi.Mapper.Attributes;
using NPOI.SS.UserModel;
using UserManagementService.Models;
namespace JobCustomerImport.Processors
{
public class ExcelEmailProcessor
{
private UserManagementServiceContext DataContext { get; }
public ExcelEmailProcessor(int customerNumber)
{
DataContext = new UserManagementServiceContext();
}
public void Execute(string localPath, int sheetIndex)
{
IWorkbook workbook;
using (FileStream file = new FileStream(localPath, FileMode.Open, FileAccess.Read))
{
workbook = WorkbookFactory.Create(file);
}
var importer = new Mapper(workbook);
var items = importer.Take<MurphyExcelFormat>(sheetIndex);
foreach(var item in items)
{
var row = item.Value;
if (string.IsNullOrEmpty(row.EmailAddress))
continue;
UpdateUser(row);
}
DataContext.SaveChanges();
}
private void UpdateUser(MurphyExcelFormat row)
{
//LOGIC HERE TO UPDATE A USER IN DATABASE...
}
private class MurphyExcelFormat
{
[Column("District")]
public int District { get; set; }
[Column("DM")]
public string FullName { get; set; }
[Column("Email Address")]
public string EmailAddress { get; set; }
[Column(3)]
public string Username { get; set; }
public string FirstName
{
get
{
return Username.Split('.')[0];
}
}
public string LastName
{
get
{
return Username.Split('.')[1];
}
}
}
}
}
```
If you're interested, I've covered some of the finer points on my blog: How to easily import excel files.
Thanks!
Dan