Excel Tabelle Auslesen und Inhalt in eine ArrayListe Speichern

Frage Excel Tabelle Auslesen und Inhalt in eine ArrayListe Speichern

  • Mittwoch, 26. Januar 2011 09:09
     
     

    Hallo Zusammen!

     

    Ich habe eine Excel Tabelle erstellt, die mehr als 1800 Zeilen und mehr als 80 Spalten enthält. Ich muss jetzt die Daten ablesen und in eine Array Liste speichern. Ich habe das wie folgt programmiert :

    public bool SPDUsEinlesen(String sExcelFile)

            {

                if (System.IO.File.Exists(sExcelFile))

                {

                    try

                    {

                        //Excel-Datei öffnen.

                        xlWorkBook = xlApp.Workbooks.Open(sExcelFile, 0, true, 5, "", "", true,               Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

                        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(4);

     

                        this.ExAuslesen();

     

                        //Excel-Datei schließen

                        xlApp.Workbooks.Close();

                        xlApp.Quit();

                    }

                    catch (Exception) { return false; }

                }

                return true;

           }

     

    private bool ExAuslesen()

            {

                //SpaltenIndex festlegen

                object[] colIndex = { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45 };

               

                //Die Schleife geht alle spalten durch

                for (int i = 3; i < xlWorkSheet.Rows.Count; i++)

                {

                    Excel.Range rngID = xlWorkSheet.get_Range("A" + i.ToString(), obj);

                    Excel.Range rngDoors_ID = xlWorkSheet.get_Range("B" + i.ToString(), obj);

                    Excel.Range rngSpdus = xlWorkSheet.get_Range("D" + i.ToString(), obj);

     

                    //Object der struktur SPDUSElement

                    SPDUSElement spd;

     

                    String Spdusel = Convert.ToString(rngSpdus.Value2);

                    string[] bytel = Spdusel.Split(element);

                    spd.ID = Convert.ToString(rngID.Value2);

                    spd.Spdus = new byte[16];

     

                    if (!String.IsNullOrEmpty(spd.ID))

                    {

                       for (int h = 0; h < colIndex.Length; h++)

                       {

                          String lgByte = ((Excel.Range)xlWorkSheet.Cells[2, colIndex[h]]).Value2.ToString();

                          //Überprüfen ob die PDUs Namen schon vorhanden sind

                          String CellName = (String)((Excel.Range)xlWorkSheet.Cells[i, colIndex[h]]).Value2;

                          if (CellName != " " && CellName != "X" && CellName != null)

                          {

                             spd.Name = CellName;

                             spd.Dlc = Convert.ToUInt16(lgByte);

                             spd.Doors_ID = Convert.ToString(rngDoors_ID.Value2);

                             for (int j = 0; j < bytel.Length; j++)

                             {

                                spd.Spdus[j] = this.GetByte(bytel[j]);

                             }

                             //PDUs speichern

                            liste.Add(spd);

                          }

                       }

                       }

                       else

                       {

                          break;

                       }

               }

              return true;

            }

     

    Es funktioniert wunderbar .Aber das Problem es dauert ewig(mehr als 3 minuten bis es fertig ist).

    Hat jemand vielleicht eine Idee oder wie ich anbesten progmieren kann.damit es schnelle geht???

     

    Ich habe es auch anderes Programmiert mit ,

     

    private DataSet dsCan = new DataSet();

    private OleDbConnection con = new OleDbConnection();

    private object[] obj = new object[] { null, null, null, "TABLE" };

    DataTable table;

    private ArrayList liste;

     

    public void SPDUsEinlesen(String sExcelFile,String tableName)

    {

                con.ConnectionString = @"Data Source=" + sExcelFile + ";Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 4.0;HDR=No;IMEX=1\"";

     

                string sql = "SELECT * FROM [" + tableName + "]";

                OleDbDataAdapter adap = new OleDbDataAdapter(sql, con);

     

                con.Open();

                table = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, obj);

               

     

                adap.Fill(dsCan, tableName);

                adap.Dispose();

     

                con.Close();

     

                this.ExAuslesen();

    }

    public bool ExAuslesen()

            {

                SPDUSElement spd = new SPDUSElement();

                spd.Spdus = new byte[16];

                 //DataTable table = new DataTable();

                table = dsCan.Tables["tabel1$"];

                //alle Reihen durchlaufen

                for (int i = 0; i < table.Rows.Count; i++)

                {

                    DataRow row = table.Rows[i];

                }

     

              return true;

            }

     

    Das Problem ist hier, dass der Zelleninhalt nicht ganz gelesen wird. Es wird immer nur eine bestimmte Spalte gelesen (Spalte Nummer 10)und bei dem Rest des Zelleninhalts kommt immer „null“ raus, obwohl in manchen Zellen was drin ist(Integer oder String…)!!!!

    Das verstehe ich leider nicht!

    Ich kenne nur die beiden Zugriffmethoden.

    Aufgrund meiner anfänglichen Kenntnisse, komme ich da leider nicht weiter und es wäre nett, wenn Sie mir weiterhelfen. Vielen Dank für die Bemühungen.

     

    Mit freundlichen Grüßen