Heim >Backend-Entwicklung >C#.Net-Tutorial >So importieren, exportieren und verarbeiten Sie Excel-Dateien in C#

So importieren, exportieren und verarbeiten Sie Excel-Dateien in C#

伊谢尔伦
伊谢尔伦Original
2016-11-21 11:28:391437Durchsuche

OleDB ist Microsofts strategische Low-Level-Anwendungsprogrammierschnittstelle für verschiedene Datenquellen. Es unterstützt viele Arten von Datenbanken. Die Eingabe und Ausgabe von DBF-Dateien in diesem Client verwendet ebenfalls diese Datenbank-API. Denken Sie bei der Verwendung von OleDB daran, den Namespace hinzuzufügen:

using System.Data.OleDb;

Eingabe der XLSX-Datei:

private void inputXlsx()
{
    string strConn2;
    string filePath = inPath;
    FileInfo fileInfo = new FileInfo(filePath);
    string directory = fileInfo.DirectoryName;

    strConn2 = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;';";
    string strConnection = string.Format(strConn2, inPath);
    OleDbConnection conn = new OleDbConnection(strConnection);
    try
    {
        conn.Open();
        String tableName = null;
        DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
        tableName = dt.Rows[0][2].ToString().Trim();
        OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + tableName + "]", strConnection);
        oada.Fill(dtOld);
        conn.Close();   
    }
    catch (Exception ex)
    {
        conn.Close();
    }
}

Die Zwischenverarbeitung der XLSX-Datei variiert je nach Bedarf und Verarbeitung Die Methode wird hier nicht im Detail beschrieben. Während des Eingabevorgangs werden die Daten in der Datei in das Datentypformat Datatable konvertiert. Es handelt sich um eine virtuelle Rastertabelle, die Daten vorübergehend speichert und sehr bequem zu verarbeiten ist.

Export der XLSX-Datei: Der Ausgabevorgang der XLSX-Datei ist nicht sehr reibungslos und es wurden drei Methoden verwendet.

Der erste Weg ist natürlich OleDB, das einen Anfang und ein Ende hat. Bei der tatsächlichen Verwendung habe ich jedoch festgestellt, dass diese Methode nicht nur die Installation von Excel auf dem Computer erfordert, um das Programm auszuführen, sondern auch sehr hohe Anforderungen an die Excel-Version stellt. Wenn Sie die Registrierung löschen, ist dies selbstzerstörerisch. Wenn ich die Registrierung ändere, werde ich Excel direkt zerstören. Tatsächlich können wir nicht garantieren, dass die entsprechende Excel-Version auf dem Computer des Kunden installiert sein muss. Wenn Sie also OleDB zum Ausgeben von Dateien verwenden, ist die Kompatibilität dieses Clients sehr schlecht.

Nach einiger Kommunikation und Mühe beschloss ich, die Methode zu ändern und mich für die Verwendung von Komponenten von Drittanbietern zu entscheiden. Da die JAVA-Seite POI verwendet, wird hier direkt die .NET-Version des POI-Projekts NPOI verwendet. Es gibt viele Online-Tutorials und es ist einfach zu implementieren. Nach dem Testen unterstützt diese Methode jedoch die Eingabe und Ausgabe großer Dateien nicht sehr gut, sie wird jedoch durch 100.000 oder sogar Millionen ersetzt Zeilen, die von echten Kunden bereitgestellt werden, stürzt der Client direkt während des Ausgabevorgangs ab.

Nach der Suche nach Informationen empfahlen Internetnutzer die Verwendung von EPPlus für große Dateien. Es gibt auch viele Tutorials. Ich habe die Dateigröße zum Testen nicht weiter erhöht, aber die etwa ein Dutzend vom Kunden bereitgestellten Dateien haben den Test alle bestanden und waren im Grunde unter einer Million.

Lassen Sie uns codieren:

private void outputXlsx()
{
    FileInfo newFile = new FileInfo(dtNew.TableName + ".xlsx");
    if (newFile.Exists)
    {
        newFile.Delete();
        newFile = new FileInfo(dtNew.TableName + ".xlsx");
    }
    using (ExcelPackage package = new ExcelPackage(newFile))
    {
        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(dtNew.TableName);//创建worksheet

        for (int m = 0; m < dtNew.Columns.Count; m++)
        {
            worksheet.Cells[1, m + 1].Value = dtNew.Columns[m];
        }
        int i = 1;
        foreach (DataRow dr in dtNew.Rows)
        {
            for (int j = 0; j < dtNew.Columns.Count; j++)
            {
                worksheet.Cells[i + 1, j + 1].Value = dr[j];
            }
            i++;
        }
        package.Save();//保存excel
    }
}


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn