Quantcast
Channel: NetOffice - MS Office in .NET
Viewing all articles
Browse latest Browse all 1741

New Post: Excel Range in DGV überführen.

$
0
0
Hallo Sebastian,

ich muss ein Excel-Tabellenblatt mit Daten auslesen, die nicht als Tabelle formatiert ist und keine vorgegebenen Überschriften trägt. Meine Lösung ist, diese in eine Textdatei, tab-getrennt zu schreiben und dann die Textdaei auszulesen. Das geht extrem schnell und gut.
Nun ist der Wunsch aufgekommen gleich die Excel-Datei einzulesen. Das geht zwar auch, ist aber bei einer halben Million Zeilen nicht gerade performant, zumindest nicht in meiner Lösung:
        private void DGVFillFromExcel(string strPath, bool IsGP, bool FillExtPGNumber, int accountnumber_stellenanzahl)
        {
            int errcounter = 0;
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            Excel.Range range;

            int rCnt = 0;
            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Open(strPath); //, 0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Sheets[1];
            range = xlWorkSheet.UsedRange;

            for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
            {
                //Hier haben wir Zugriff auf jede Zeile
                if (((range.Cells[rCnt, 1] as Excel.Range).Value2 != null) && ((range.Cells[rCnt, 2] as Excel.Range).Value2 != null))
                {
                    string sZelleSpalte1 = (range.Cells[rCnt, 1] as Excel.Range).Value2.ToString();
                    string sZelleSpalte2 = (range.Cells[rCnt, 2] as Excel.Range).Value2.ToString();
                    string[] row = new string[] { sZelleSpalte1.Trim(), sZelleSpalte2.Trim() };
                    if (row[0] == string.Empty || row[1] == string.Empty)
                        errcounter++;
                    else
                        dgvTPSInfo.Rows.Add(row);
                }
                else
                    errcounter++;
            }
            xlWorkBook.Close(true, null, null);
            xlApp.Quit();

            this.dgvTPSInfo.Visible = true;
            if (errcounter > 0)
                this.tsStatusLabel.Text = errcounter.ToString() + " fehlerhafte Zeilen gefunden";
        }
Gibt es einen besseren vor allem schnelleren Lösungsansatz? Das hier funktiert zwar, ist aber so langsam, dass man auf das Ergebnis viel zu lange warten muss.

Danke und einen schönen Abend

Viewing all articles
Browse latest Browse all 1741

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>