Entwickler-Ecke

WinForms - Nach Auswahl in ComboBox, restliche Zellen einlesen!


2Good4You - Mo 07.01.08 18:13
Titel: Nach Auswahl in ComboBox, restliche Zellen einlesen!
So,

Es handelt sich hiebei um eine kleine Berechnung!

habe eine Form1 in der sich eine ComboBox und zwei Textboxen befinden!

Beim Starten der Form1 wird EXCEl geöffnet, und die Spalte A eines Files wird eingelesen! ( in der Spalte A befinden sich verschiedene Materialien)

Die zwei Textboxen dienen zur eingabe von zwei werten!
Durch drücken des Buttons "OK" erfolgt die berechnung.

Aber nun zu meinem Problem:

Da zur Berechnung nicht nur die Spalte A benötigt wird, möchte ich, dass nach der Auswahl in der Combobox die restlichen spalten eingelesen und in Variablen gschreiben werden.

Beispiel: Ich wähle in der Combobox das Material "XY" aus. Dies befindet sich im Zelle A5.
Zur berechnung benötige ich aber auch B5, C5 und D5.
Wie kann ich das Realisieren.

habe mal wo gelesen, das es mit einem "struct" recht gut funkionieren soll, weiß aber leider nicht wie ich da anfangen soll!
Kann mir da vielleicht, jemand Ansätze liefern?

habe das mit dem einlesen des Excel-Files so realisiert:


C#-Quelltext
1:
2:
3:
4:
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:
46:
47:
48:
49:
50:
51:
52:
53:
54:
private void Form1_Load(object sender, EventArgs e)
        {
            //Starten von Excel, und einlesen der ersten Spalte "Material"
            // Die Excel Anwendung
            ApplicationClass xlApplication = new ApplicationClass();

            // Eine Referenz zum Workbook (dies ist die .XLS Datei)
            Workbook xlWorkbook = null;

            // Eine Referenz zum Worksheet (Arbeitsblatt)
            Worksheet xlWorksheet = null;

            // Einen Range (Bereich) mit den Daten
            Range xlRange = null;

            // 'false' um die Anwendung zu beschleunigen.
            // 'true' um den Vorgang sichtbar zu machen und Fehler anzuzeigen
            xlApplication.Visible = false;
            xlApplication.ScreenUpdating = false;
            xlApplication.DisplayAlerts = false;

            //Excel Datei öffnen
            xlWorkbook = xlApplication.Workbooks.Open("C:\\datenbank.xls"0true5""""true, XlPlatform.xlWindows, "\t"falsefalse0true0false);

            // Erste Arbeitsblatt wird gewählt
            xlWorksheet = (Worksheet)xlWorkbook.Worksheets[1];

            // Spalte A wird eingelesen (von A1 - A50)
            xlRange = xlWorksheet.get_Range("A1""A50");
            Array werte = (Array)xlRange.Cells.Value2;
            foreach (string wert in werte)
            {
                if (wert != null)
                {
                    //Werte in ComboBox hinzufügen
                    material.Items.Add(wert);
                }
            }
            // Range und Worksheet Objekte freigeben
            xlRange = null;
            xlWorksheet = null;

            // Falls noch offen, Excel Datei schliessen und
            // Workbook Objekt freigeben
            if (xlWorkbook != null)
                xlWorkbook.Close(falsenullnull);
            xlWorkbook = null;

            // Falls noch offen, Anwendung schliessen und
            // Application Objekt freigeben
            if (xlApplication != null)
                xlApplication.Quit();
            xlApplication = null;
        }


Christian S. - Mo 07.01.08 18:40

Geht das nicht einfach mit dem xlWorksheet.get_Range, was Du schon verwendest? :gruebel:


2Good4You - Di 08.01.08 06:33

Da mit dem xlWorksheet.get_Range stimmt schon, aber bei mir scheiterts eher daran, wie ich die Werte aus den Zellen in Variablen schreibe!
Und dies soll ja erst passieren, wenn man ein Item in der ComboBox ausgewählt hat!

mfg


2Good4You - Mi 09.01.08 07:07

also das mit der auswahl in der ComboBox habe ich nun!

da gibt es ein eigenes Event:

SelectedValueChanged, und SelectedIndex Changed!

Die Excel Zeilen kann ich mit xlWorksheet.get_Range laden, aber wie kann ich abfragen in welcher Zeile des Excel-Files das Item steht, dass ich in der ComboBox auswähle, damit ich die passenden Zellen einlesen kann?

mfg