Schnellste Weg, um eine Excel-Bereich von Zeilen
In einem VSTO-C# - Projekt möchte ich, um eine Reihe von Zeilen, die aus einem Satz von Zeilen-Indizes.
Den Zeilen-Indizes werden können, wie zum Beispiel "7,8,9,12,14".
Dann möchte ich die Auswahl "7:9,12,14" Zeilen.
Ich jetzt tun:
Range rng1 = sheet.get_Range("A7:A9,A12,A14", Type.Missing);
rng1 = rng1.EntireRow;
Aber es ist ein wenig ineffizient wegen string-handling im Bereich Spezifikation.
sheet.Rows["7:9"]
funktioniert, aber ich kann nicht geben
sheet.Rows["7:9,12,14"] //Fails
- Sie können union in den einzelnen Bereichen, aber das kann nicht sein, effizienter als die Verwendung des einzigen Aufruf mit der verketteten Adresse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
EDIT: Sorry, wenn die Verwendung von VSTO in C# sollte es gewesen sein:
.get_Range
ist der richtige Weg 🙂Hier ist der code, den Sie suchen:
Haben Sie können den gesamten Bereich, sei es die 1-dimensionalen oder 2-dimensionalen array von Zellen.
Diese Methode ist besonders hilfreich, während die Schleife durch die gesamte excel-Tabelle und füllen die Daten, wo und Wann erforderlich.
Ich bin kein Experte in C#, aber AFAIK müssen Sie das EntireRow, wie Sie getan haben, vor. Die Zeichenfolge, die Sie suchen erreicht werden kann, von der
.Address
Eigenschaft. Zum BeispielSo können Sie schreiben, wie Sie oben
Siehe Teil
Reafidy bearbeitete Antwort ist ein guter Anfang, aber ich wollte es erweitern, die es mehr als ich tun konnte, in einem Kommentar.
sheet.get_Range(rangeselect)
ist viel schneller, als sich Zeile für Zeile, aber eine Sache habe ich nicht gesehen, noch erwähnt ist, dass die get_Range parameter hat eine Begrenzung auf 255 Zeichen.Herum zu erhalten, dass die Einschränkung, konstruieren Sie eine Menge von Bereichen wie "8:8,10:13,14:55" als normal, dann verwenden Sie eine Variante dieser code:
Diese werden deutlich schneller als Operationen auf einzelnen Zeilen, aber auch nicht scheitern, wenn die Darstellung mit großen, nicht-zusammenhängenden Zeile setzt.
Beachten Sie, dass SutharMonil die Antwort ist viel schneller IFF-Werte in zusammenhängende rechteckige Bereiche. Der Engpass geht von C# auf excel ist in der Regel die wiederholten Aufrufe, die durch die COM-Objekte, die blockieren, während Sie erstellt und aktualisiert werden, und seine Antwort schön konsolidiert Anrufe.
Leider in meinen Tests so weit, versuchen Sie es verwenden, um arbeiten mit "nicht-string" - Eigenschaften, die nicht vom Typ string hat, führte zu einer Art Fehlermeldung. Zum Beispiel:
Ich werde versuchen zu erinnern, zu aktualisieren, wenn ich es bekommen, um zu arbeiten.
Schließlich für wiederholte Operationen festgelegt
Globals.ThisAddIn.Application.ScreenUpdating = false;
und dann setzen Sie ihn auf true, wenn Sie fertig sind. Ohne diese, Excel Stoppt, um den Bildschirm zu aktualisieren nach jedem Satz des Bereichs Eigenschaften werden aktualisiert, und das können eine Menge Zeit, um den Betrieb.Diesen code legen Sie die Farbe Palette Zellen, die basierend auf Kriterien:
HTML: