2016-06-20 12 views
0

Ich habe eine Liste von Objekten, und ich versuche, drei Reihen für jedes Objekt zu widmen, und ich bin mit der „Office Open XML-Bibliothek“ mit dieser Routine:Wie füge ich Zellen in Excel zusammen?

int row = 1, col = 1; 
for (int i = 0; i < MyList.Count * 3; i+=3) 
{ 
    MySheet.Cells[row + i, col, row + i + 1, col].Merge = true; // merge two and get a "result" 
    MySheet.Cells[row + i + 1, col, row + i + 2, col].Merge = true; // merge "result" with third row 
} 

jedoch einen Fehler erscheint sagen kann die bereits verbundene Zelle nicht zusammenführen.

Die Frage ist also Wie in Excel mehr als zwei Zellen fusionieren?

+0

Sie haben diesen Code bereits geschrieben - ändern Sie einfach die Indizes. Wenn Sie drei Zeilen zusammenführen möchten, verwenden Sie 'row + i + 2' anstelle von' row + i + 1'. –

+0

Nein, tut es nicht. Die Indizes geben eine * Region * an, keine einzelne Zelle. Alles in Excel basiert auf Bereichen. Selbst eine Zelle wird als Einzelzelle behandelt. –

+0

@pan ich wusste nicht, dass es eine Reihe war und ich fühle mich doof :))))) danke ich sehe es jetzt –

Antwort

1

Die Indizes geben eine Reihe von Zellen an, nicht nur zwei benachbarte Zellen. Fusionieren Zellen über drei Zeilen können Sie

MySheet.Cells[row + i, col, row + i + 2, col].Merge = true; 

schreiben oder Sie können ein 3x2-Block

MySheet.Cells[row + i, col, row + i + 2, col+1].Merge = true; 

Alles in Excel ist ein Bereich verschmelzen. Sogar eine einzelne Zelle wird als Einzelzelle behandelt. Dies macht das Arbeiten mit einzelnen Zellen ein bisschen komisch, aber es macht die Anwendung von Stilen und Formeln viel einfacher

+0

Arbeitete wie ein Zauber. Ein Q allerdings, wenn ich in diesen Bereich/Block von verbundenen Zellen schreiben möchte. Welchen Wert sollte ich als Index verwenden? Jeder Wert zwischen [row + i und row + i + 2'] würde gut funktionieren? –

+1

Die meisten Methoden, die Sie für Zellen verwenden, werden tatsächlich von Range geerbt. Speichern Sie den Bereich in einer lokalen Variablen und legen Sie den Wert des Werts fest, zB 'var myRange = MySheet.Cells [Zeile + i, Spalte, Zeile + i + 2, Spalte]; myRange.Merge = true; myRange.Value = 5; ' –

+0

Cool, Ich denke, ich werde Ihren Weg verwenden, aber nur um zu erwähnen, dass ich es getestet habe und _ ** Any ** _ Einzelzellenindex innerhalb einer Reihe von Block/Bereich von verbundenen Zellen wird vollständig funktionieren Fein wie ein Index für den _ ** ganzen ** _ Block/Bereich von verbundenen Zellen –

Verwandte Themen