Ich fand, dass NPOI sehr gut ist, um Excel-Dateien mit C # zu schreiben.
Aber ich möchte Excel-Dateien in C # öffnen, lesen und ändern.
Wie kann ich das machen?
Einfaches Lesebeispiel unten:
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
//.....
private void button1_Click(object sender, EventArgs e)
{
HSSFWorkbook hssfwb;
using (FileStream file = new FileStream(@"c:\test.xls", FileMode.Open, FileAccess.Read))
{
hssfwb= new HSSFWorkbook(file);
}
ISheet sheet = hssfwb.GetSheet("Arkusz1");
for (int row = 0; row <= sheet.LastRowNum; row++)
{
if (sheet.GetRow(row) != null) //null is when the row only contains empty cells
{
MessageBox.Show(string.Format("Row {0} = {1}", row, sheet.GetRow(row).GetCell(0).StringCellValue));
}
}
}
Übrigens: Auf der NPOI-Website hier im Download-Bereich gibt es ein Beispielpaket - ein Paket mit C # -Beispielen . Probieren Sie es aus, wenn Sie es noch nicht getan haben. :) :)
Es kann hilfreich sein, sich beim Instanziieren des Arbeitsmappenobjekts auf die Workbook-Factory zu verlassen, da die Factory-Methode die Erkennung von xls oder xlsx für Sie übernimmt. Referenz: http://apache-poi.1045710.n5.nabble.com/How-to-check-for-valid-excel-files-using-POI-without-checking-the-file-extension-td2341055.html
Wenn Sie sich über den Namen des Blattes nicht sicher sind, sich aber über den Index (basierend auf 0) sicher sind, können Sie das Blatt wie folgt greifen:
Sie können dann die Zeilen mit dem Code durchlaufen, der von der akzeptierten Antwort von mj82 bereitgestellt wird
quelle
FileStream
,inputStream
solltenFileMode.Open
undFileAccess.Read
, und um Ihre Änderungen auf der Festplatte zu speichern, müssen Sie eine neueFileStream
mitFileAccess.Write
Berechtigung öffnen . es scheint nicht mit einemReadWrite
Stream zu funktionieren . Abgesehen davon scheinenWrite()
NPOIsIWorkbook
keineSave()
Methode vom Typ zu haben , mit der eine Arbeitsmappe überarbeitet und anschließend gespeichert werden kann, wie dies bei Excel Interop der Fall ist.Ich finde NPOI sehr nützlich für die Arbeit mit Excel-Dateien. Hier ist meine Implementierung (Kommentare sind auf Spanisch, sorry dafür):
Diese Methode öffnet eine Excel-Datei (sowohl xls als auch xlsx) und konvertiert sie in eine DataTable.
Diese zweite Methode macht das Gegenteil, speichert eine Datentabelle in einer Excel-Datei, ja, es kann entweder xls oder das neue xlsx sein, Ihre Wahl!
Mit diesen beiden Methoden können Sie eine Excel-Datei öffnen, in eine DataTable laden, Ihre Änderungen vornehmen und sie wieder in einer Excel-Datei speichern.
Hoffe ihr findet das nützlich.
quelle
ICSharpCode.SharpZipLib.dll
undNPOI.OpenXmlFormats.dll
sind auch erforderlich, um XLSX-Datei zu lesenquelle
Wie Janoulle betonte, müssen Sie nicht erkennen, um welche Erweiterung es sich handelt, wenn Sie die WorkbookFactory verwenden, sie wird dies für Sie tun. Ich musste kürzlich eine Lösung mit NPOI implementieren, um Excel-Dateien zu lesen und E-Mail-Adressen in eine SQL-Datenbank zu importieren. Mein Hauptproblem war, dass ich wahrscheinlich 12 verschiedene Excel-Layouts von verschiedenen Kunden erhalten würde, sodass ich etwas brauchte, das ohne viel Code schnell geändert werden konnte. Am Ende habe ich Npoi.Mapper verwendet, ein großartiges Tool! Sehr empfehlenswert!
Hier ist meine Komplettlösung:
Ich bin mit NPOI + Npoi.Mapper ( von Donny Tian ) als Excel- Importlösung so zufrieden, dass ich einen Blog-Beitrag darüber geschrieben habe, in dem ich oben ausführlicher auf diesen Code eingegangen bin . Sie können es hier lesen, wenn Sie möchten: Einfachste Möglichkeit, Excel-Dateien zu importieren . Das Beste an dieser Lösung ist, dass sie perfekt in einer serverlosen Azure / Cloud-Umgebung ausgeführt wird, die ich mit anderen Excel-Tools / Bibliotheken nicht erreichen konnte.
quelle
quelle
Da haben Sie gebeten zu lesen und zu ändern haben, die XLS-Datei habe ich die Antwort von @ mj82 geändert, um Ihren Anforderungen zu entsprechen.
HSSFWorkbook
hat keineSave
Methode, aber es mussWrite
ein Stream.quelle
Wenn Sie NPOI.Mapper nicht verwenden möchten, empfehlen wir Ihnen, diese Lösung zu testen. Sie behandelt das Lesen von Excel-Zellen in verschiedene Typen und verfügt über einen einfachen Import-Helfer: https://github.com/hidegh/ NPOI.Extensions
quelle