Laden...

Excel Spalte auslesen

Erstellt von amayer1983 vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.697 Views
A
amayer1983 Themenstarter:in
10 Beiträge seit 2014
vor 6 Jahren
Excel Spalte auslesen

Hallo,

ich möchte mir eine bekannte Spalte ab Zeile 5 in ein array laden.

Wenn in den Zellen Werte stehen, dann funktioniert das ganze auch, aber wenn weiter unten leere Zellen sind, bekomme ich meine message Box nicht mehr angezeigt, aber auch keinen Fehler. Die Message Box nach der Schleife wird aber auch nicht aufgerufen.

Ich sollte dazu sagen, dass ich anfänger bin 😉




// Variablen deklarieren 
            Excel.Application myExcelApplication;
            Excel.Workbook myExcelWorkbook;
            Excel.Worksheet myExcelWorkSheet;
            myExcelApplication = null;

            try
            {

                myExcelApplication = new Excel.Application();
                myExcelApplication.Visible = false;
                myExcelApplication.ScreenUpdating = true;


                var myCount = myExcelApplication.Workbooks.Count;
                myExcelWorkbook = myExcelApplication.Workbooks.Open(StücklistefürZeugnissammlung);

                //(Excel.Workbook)(myExcelApplication.Workbooks.Add(System.Reflection.Missing.Value));





                myExcelWorkSheet = (Excel.Worksheet)myExcelWorkbook.ActiveSheet;

                int imax = 200;
                string wert = "";

                for (int i = 5; i < imax; i++)
                {

                    wert = myExcelWorkSheet.Cells[i, 5].ToString();
                    try
                    {
                        wert = myExcelWorkSheet.Cells[i, 5].value.ToString();
                        //wert = myExcelWorkSheet.Range["E" + i].Value.ToString();
                    }
                    catch (Exception)
                    {

                        throw;
                    }

                    MessageBox.Show("Zelle" + i + "Wert: " + wert);
                                     

                    wert = "-";
                   
                }
                MessageBox.Show("Schleife ist zu Ende");

            }
            catch (Exception ex)
            {

            }
            finally
            {
                //Excel beenden 
                  if (myExcelApplication != null)
                  {
                      myExcelApplication.Quit();
                 }

            }




16.826 Beiträge seit 2008
vor 6 Jahren

Jeder fängt mal klein an; aber wir können Dir nicht die Arbeit übernehmen.

Logische Fehler, wie es dieser offensichtlich ist, kannst Du ganz einfach selbst mit dem Debugger ermitteln.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

Dann siehst Du was passiert, was eigentlich nicht passieren sollte (oder umgekehrt).

A
amayer1983 Themenstarter:in
10 Beiträge seit 2014
vor 6 Jahren

Naja, ich sehe dass er mir aus der Schleife Springt, nur nicht wieso, hast du noch einen kleinen Tipp für mich?

Ich sehe vor lauter Bäumen den Wald nicht mehr, und das wo ich das erste mal im Wald bin 😉

P
441 Beiträge seit 2014
vor 6 Jahren

Einfach mit dem Debugger durchsteppen und schauen an welcher Stelle das passiert.

A
amayer1983 Themenstarter:in
10 Beiträge seit 2014
vor 6 Jahren

Das hab ich.

Ist immer an der Stelle, wenn eine Zelle leer ist.
Nur verstehe ich nicht wieso, und somit schon net wie ich das verhindern kann.

187 Beiträge seit 2009
vor 6 Jahren

Ich vermute mal ganz startk, dass der catch-Block ausgeführt wird, wenn auf eine Leere Zelle zugegriffen wird.
Danach der finally-Block und Ende.
Setze doch mal einen Breakpoint im inneren Catch-Block bei der throw-Anweisung.

A
amayer1983 Themenstarter:in
10 Beiträge seit 2014
vor 6 Jahren

Habs gefunden 😉

Danke

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo amayer1983,

kannst du zukünftigen Hilfesuchenden noch sagen, woran es gelegen hat?

Gruss

Coffeebean

A
amayer1983 Themenstarter:in
10 Beiträge seit 2014
vor 6 Jahren

du hast recht 😉

das PRoblem liegt hier:


wert = myExcelWorkSheet.Cells[i, 5].value.ToString();

Ich habe es auf Value2 geändert, da hier der angezeigte Wert einer Zelle abgefragt wird, und dies bei einer Formel somit einen Großen Unterschied macht.

Zudem liefert eine leere Zelle ein null zurück, was wohl nicht in einen String konvertiert werden möchte.

aktuell läuft das ganze wie folgt:



if (myExcelWorkSheet.Cells[i, 5].Value2 == null)
                    {
                        // Hier eine Meldung oder ähnliches für eine leere Zelle.
                    }
                    else
                    {

                      // der auszuführende Code

                    }


Sollte es noch nützliche ergänzungen der Profis, über das wie, etc. geben, bitte immer her damit, ich, und die anderen Suchenden lernen ja nie aus (Gott sein dank;-) )
...