Mir ist klar, dass diese Frage vor fast 7 Jahren gestellt wurde, aber es ist immer noch ein Top-Google-Suchergebnis für bestimmte Keywords beim Importieren von Excel-Daten mit C #. Daher wollte ich eine Alternative anbieten, die auf einigen aktuellen technischen Entwicklungen basiert.
Das Importieren von Excel-Daten ist zu einer so häufigen Aufgabe geworden, dass ich den Prozess optimiert und die Methode in meinem Blog dokumentiert habe: Der beste Weg, um Excel-Dateien in c # zu lesen .
Ich verwende NPOI, weil es Excel-Dateien ohne installiertes Microsoft Office lesen / schreiben kann und weder COM + noch Interops verwendet. Das heißt, es kann in der Cloud funktionieren!
Die wahre Magie liegt jedoch in der Zusammenarbeit mit NPOI Mapper von Donny Tian, da ich die Excel-Spalten Eigenschaften in meinen C # -Klassen zuordnen kann, ohne Code schreiben zu müssen. Es ist wunderschön.
Hier ist die Grundidee:
Ich erstelle eine .net-Klasse, die den Excel-Spalten entspricht, die mich interessieren:
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];
}
}
}
Beachten Sie, dass ich basierend auf dem Spaltennamen eine Zuordnung vornehmen kann, wenn ich möchte!
Wenn ich dann die Excel-Datei verarbeite, muss ich nur noch Folgendes tun:
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();
}
Zugegeben, mein Code ändert die Excel-Datei selbst nicht. Ich speichere stattdessen die Daten mit Entity Framework in einer Datenbank (deshalb sehen Sie in meinem Beispiel "UpdateUser" und "SaveChanges"). Es gibt jedoch bereits eine gute Diskussion über SO, wie eine Datei mit NPOI gespeichert / geändert werden kann .