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();
}
}
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).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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 😉
Einfach mit dem Debugger durchsteppen und schauen an welcher Stelle das passiert.
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.
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.
Hallo amayer1983,
kannst du zukünftigen Hilfesuchenden noch sagen, woran es gelegen hat?
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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;-) )
...