我知道这是一个有很好答案的老问题,但是这个页面在谷歌“import xlsx c#”的结果中排名靠前,所以我想添加一种更现代、更简单的方法来使用 NPOI 库读取 xls/xlsx 数据。我想确保新的 c# 开发人员知道有一种更简单的方法来导入 Excel 数据,而不是使用 ado.net。
我结合使用 NPOI 和 Npoi.Mapper(来自 donnytian:https ://github.com/donnytian/Npoi.Mapper )轻松导入 Excel 文件。添加对 NPOI 和 Npoi.Mapper 的 nuget 引用,然后您可以使用与要导入的列直接相关的强类型类导入 xls/xlsx 数据。
```使用 System.IO; 使用 System.Linq;使用 Npoi.Mapper;使用 Npoi.Mapper.Attributes;使用 NPOI.SS.UserModel;使用 UserManagementService.Models;
命名空间 JobCustomerImport.Processors { 公共类 ExcelEmailProcessor { 私有 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 文件。
谢谢!担