Laden...

Gibts kein Row Objekt in Exel.interop?

Erstellt von Telefisch vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.410 Views
T
Telefisch Themenstarter:in
374 Beiträge seit 2008
vor 15 Jahren
Gibts kein Row Objekt in Exel.interop?

Hallo, ich schon wieder.
Also entweder bin ich blind oder...

Ich möchte alle Zellen der ersten Spalte nach einem bestimmten Wert durchsuchen.

Hier mein Lösungsansatz:


Workbook wb = Globals.ThisAddIn.Application.ActiveWorkbook();
         foreach(Worksheet sheet in wb)
                {
                    if (sheet.Name = "Setup")
                    {
                        //Alle Zeilen erste Spalte durchsuchen
                        foreach(Row row in sheet.Rows)
...
                

nur Row gibts nicht. Kann das sein?

Ich muss irgendwie die einzelnen Zellen finden...

Danke.

1.200 Beiträge seit 2007
vor 15 Jahren

Letztendlich arbeitest du sowieso nur mit Ranges in Excel.

Probier mal:

foreach(Range row in sheet.Rows)

Musst aber wahrscheinlich mit Laufvariablen arbeiten.

Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!

T
Telefisch Themenstarter:in
374 Beiträge seit 2008
vor 15 Jahren

Hmm...
wäre ja auch zu schön gewesen:


                        foreach (Range row in sheet.Rows)
                        {
                            i++;
                            if (row[i, 1].ToString() != "")
                                System.Windows.Forms.MessageBox.Show(row[i, 1].ToString());
                        }

...gibt bei row[i, 1].ToString() einen Fehler:

Ausnahme von HRESULT: 0x800A03EC

T
Telefisch Themenstarter:in
374 Beiträge seit 2008
vor 15 Jahren

Also nochmal...

folgender Code funktioniert zum Teil:


public static string getMacroFolder()
        {
            int i = 0;
            string folder = "";
            if (DDT.ESG2007.Properties.Settings.Default.LoadSettingsFromTable)
            {
                Workbook wb = Globals.ThisAddIn.Application.ActiveWorkbook;
                Worksheet activeSheet = (Worksheet)wb.ActiveSheet;
                Worksheet setupSheet = null;
                //Worksheet ws = null;
                //Aktuelles Workbook holen
                foreach (Worksheet sheet in wb.Sheets)
                {
                    if (sheet.Name == "Setup")
                    {
                        sheet.Activate();
                        //Alle Zeilen erste Spalte durchsuchen
                        foreach (Range row in sheet.Rows)
                        {
                            i++;
                            if (sheet.Cells[ i, 1].ToString() != "")
                                System.Windows.Forms.MessageBox.Show(sheet.Cells[i, 1].ToString());
                        }
                    }
                }
                //Einstellungen aus Tabelle laden
                folder = "";
            }

Jetzt hab ich zwar keine Fehlermeldung aber dafür gibt mir sheet.Cells[i,1].ToString() nur System._ComObject zurück und nicht den Wert der Zelle...

Hat vielleicht jemand nen Link zu diesem Thema?
Ich glaub ich hab da noch Bedarf.
Aus der MSDN werd ich nicht schlau.

1.200 Beiträge seit 2007
vor 15 Jahren

Du musst

sheet.Cells[row, col].Value

nutzen.

Also das Value Property einer Range oder Cell!

Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!

T
Telefisch Themenstarter:in
374 Beiträge seit 2008
vor 15 Jahren

Jo, gibts nur nicht 🤔

Hab aber nen Weg gefunden:


foreach (Range row in sheet.Rows)
                        {
                            i++;
                            if (sheet.get_Range(sheet.Cells[ i, 1],sheet.Cells[i,1]).Value2.ToString() != "")
                                System.Windows.Forms.MessageBox.Show(sheet.get_Range(sheet.Cells[i, 1], sheet.Cells[i, 1]).Value2.ToString());
}

Bescheuert aber wenns anders nicht geht...

1.200 Beiträge seit 2007
vor 15 Jahren

Müsstest es casten:

((Range)sheet.Cells[row, col]).Value

Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!

T
Telefisch Themenstarter:in
374 Beiträge seit 2008
vor 15 Jahren

pff...
hatte ich schon versucht, hab aber ein Paar Klammern vergessen 8o

Danke.