Я знаю, что это старый вопрос с хорошим ответом, но эта страница высоко оценила результаты Google по запросу "import xlsx c #", поэтому я хотел добавить более современный и более простой способ чтения данных xls / xlsx с использованием библиотеки NPOI.,Я хочу убедиться, что новые разработчики на c # знают, что существует более простой способ импорта данных Excel, чем использование ado.net.
Я использую комбинацию NPOI и Npoi.Mapper (от donnytian: https://github.com/donnytian/Npoi.Mapper) для легкого импорта файлов Excel. Добавьте ссылку на nuget в NPOI и Npoi.Mapper, а затем вы можете импортировать данные xls / xlsx, используя строго типизированные классы, которые напрямую связаны со столбцами, которые вы хотите импортировать.
`` `использование System.IO; использование System.Linq; использование Npoi.Mapper; использование Npoi.Mapper.Attributes; использование NPOI.SS.UserModel; использование UserManagementService.Models;
пространство имен JobCustomerImport.Processors {открытый класс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];
}
}
}
}
} `` `
Если вам интересно, я рассмотрел некоторые тонкости моего блога: Как легко импортировать файлы Excel .
Спасибо! Дэн