Я понимаю, что этот вопрос был задан почти 7 лет назад, но он по-прежнему является одним из лучших результатов поиска Google по определенным ключевым словам, касающимся импорта данных Excel с помощью С#, поэтому я хотел предоставить альтернативу, основанную на некоторых последних технических разработках.
Импорт данных из Excel стал настолько распространенной задачей среди моих повседневных обязанностей, что я упростил этот процесс и задокументировал метод в своем блоге: лучший способ чтения файла excel в c#.
Я использую NPOI, потому что он может читать/записывать файлы Excel без установленного Microsoft Office и не используйте COM+ или любое взаимодействие. Это означает, что он может работать в облаке!
Но настоящее волшебство происходит в паре с NPOI Mapper от Донни Тиана, поскольку он позволяет мне сопоставлять столбцы Excel со свойствами. на моих занятиях по C# без написания кода. Это красиво.
Вот основная идея:
Я создаю класс .net, который соответствует/сопоставляет интересующие меня столбцы Excel:
class CustomExcelFormat
{
[Column("District")]
public int District { get; set; }
[Column("DM")]
public string FullName { get; set; }
[Column("Email Address")]
public string EmailAddress { get; set; }
[Column("Username")]
public string Username { get; set; }
public string FirstName
{
get
{
return Username.Split('.')[0];
}
}
public string LastName
{
get
{
return Username.Split('.')[1];
}
}
}
Обратите внимание, это позволяет мне отображать на основе имени столбца, если я хочу!
Затем, когда я обрабатываю файл excel, все, что мне нужно сделать, это что-то вроде этого:
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<CustomExcelFormat>(sheetIndex);
foreach(var item in items)
{
var row = item.Value;
if (string.IsNullOrEmpty(row.EmailAddress))
continue;
UpdateUser(row);
}
DataContext.SaveChanges();
}
Теперь, по общему признанию, мой код не изменяет сам файл Excel. Вместо этого я сохраняю данные в базу данных с помощью Entity Framework (поэтому в моем примере вы видите «UpdateUser» и «SaveChanges»). Но на SO уже есть хорошая дискуссия о том, как сохранить/изменить файл с помощью НКО.
person
Dan
schedule
18.02.2019
DataTable
на лист и экспорт листа вDataTable
. - person Hazel Patton   schedule 24.12.2019