MergeCells Class
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Defines the MergeCells Class.
This class is available in Office 2007 and above.
When the object is serialized out as xml, it's qualified name is x:mergeCells.
[DocumentFormat.OpenXml.ChildElementInfo(typeof(DocumentFormat.OpenXml.Spreadsheet.MergeCell))]
[DocumentFormat.OpenXml.OfficeAvailability(DocumentFormat.OpenXml.FileFormatVersions.Office2007)]
[DocumentFormat.OpenXml.SchemaAttr(22, "mergeCells")]
public class MergeCells : DocumentFormat.OpenXml.OpenXmlCompositeElement
public class MergeCells : DocumentFormat.OpenXml.OpenXmlCompositeElement
[DocumentFormat.OpenXml.SchemaAttr(22, "mergeCells")]
public class MergeCells : DocumentFormat.OpenXml.OpenXmlCompositeElement
[DocumentFormat.OpenXml.SchemaAttr("x:mergeCells")]
public class MergeCells : DocumentFormat.OpenXml.OpenXmlCompositeElement
[DocumentFormat.OpenXml.SchemaAttr("x:mergeCells")]
public class MergeCells : DocumentFormat.OpenXml.TypedOpenXmlCompositeElement
[DocumentFormat.OpenXml.ChildElementInfo(typeof(DocumentFormat.OpenXml.Spreadsheet.MergeCell))]
public class MergeCells : DocumentFormat.OpenXml.OpenXmlCompositeElement
[DocumentFormat.OpenXml.ChildElementInfo(typeof(DocumentFormat.OpenXml.Spreadsheet.MergeCell))]
[DocumentFormat.OpenXml.OfficeAvailability(DocumentFormat.OpenXml.FileFormatVersions.Office2007)]
public class MergeCells : DocumentFormat.OpenXml.OpenXmlCompositeElement
[<DocumentFormat.OpenXml.ChildElementInfo(typeof(DocumentFormat.OpenXml.Spreadsheet.MergeCell))>]
[<DocumentFormat.OpenXml.OfficeAvailability(DocumentFormat.OpenXml.FileFormatVersions.Office2007)>]
[<DocumentFormat.OpenXml.SchemaAttr(22, "mergeCells")>]
type MergeCells = class
inherit OpenXmlCompositeElement
type MergeCells = class
inherit OpenXmlCompositeElement
[<DocumentFormat.OpenXml.SchemaAttr(22, "mergeCells")>]
type MergeCells = class
inherit OpenXmlCompositeElement
[<DocumentFormat.OpenXml.SchemaAttr("x:mergeCells")>]
type MergeCells = class
inherit OpenXmlCompositeElement
[<DocumentFormat.OpenXml.SchemaAttr("x:mergeCells")>]
type MergeCells = class
inherit TypedOpenXmlCompositeElement
[<DocumentFormat.OpenXml.ChildElementInfo(typeof(DocumentFormat.OpenXml.Spreadsheet.MergeCell))>]
type MergeCells = class
inherit OpenXmlCompositeElement
[<DocumentFormat.OpenXml.ChildElementInfo(typeof(DocumentFormat.OpenXml.Spreadsheet.MergeCell))>]
[<DocumentFormat.OpenXml.OfficeAvailability(DocumentFormat.OpenXml.FileFormatVersions.Office2007)>]
type MergeCells = class
inherit OpenXmlCompositeElement
Public Class MergeCells
Inherits OpenXmlCompositeElement
Public Class MergeCells
Inherits TypedOpenXmlCompositeElement
- Inheritance
- Inheritance
- Attributes
Examples
The following code example merges two adjacent cells in an existing spreadsheet. After you run the example, take a look at the file and notice the merged cells.
using System;
using System.Collections.Generic;
using System.Linq;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System.Text.RegularExpressions;
namespace MergeCellsEx
{
class Program
{
// Merge two adjacent cells in a worksheet.
// Notice that after the merge, only the content from one cell is preserved.
static void Main(string[] args)
{
string docName = @"C:\Users\Public\Documents\MergeCellsEx.xlsx";
string sheetName = "mySheet";
string cell1Name = "A2";
string cell2Name = "B2";
using (SpreadsheetDocument document = SpreadsheetDocument.Open(docName, true))
{
Worksheet worksheet = GetWorksheet(document, sheetName);
// Create Spreadsheet cells.
CreateSpreadsheetCell(worksheet, cell1Name);
CreateSpreadsheetCell(worksheet, cell2Name);
MergeCells mergeCells;
if (worksheet.Elements<MergeCells>().Count() > 0)
mergeCells = worksheet.Elements<MergeCells>().First();
else
{
mergeCells = new MergeCells();
// Insert a MergeCells object into the specified position.
if (worksheet.Elements<CustomSheetView>().Count() > 0)
worksheet.InsertAfter(mergeCells, worksheet.Elements<CustomSheetView>().First());
else
worksheet.InsertAfter(mergeCells, worksheet.Elements<SheetData>().First());
}
// Create the merged cell and append it to the MergeCells collection.
MergeCell mergeCell = new MergeCell() { Reference =
new StringValue(cell1Name + ":" + cell2Name) };
mergeCells.Append(mergeCell);
worksheet.Save();
}
Console.WriteLine("The two cells are now merged.\nPress a key.");
Console.ReadKey();
}
// Get the specified worksheet.
private static Worksheet GetWorksheet(SpreadsheetDocument document, string worksheetName)
{
IEnumerable<Sheet> sheets = document.WorkbookPart.Workbook
.Descendants<Sheet>().Where(s => s.Name == worksheetName);
WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart
.GetPartById(sheets.First().Id);
return worksheetPart.Worksheet;
}
// Create a spreadsheet cell.
private static void CreateSpreadsheetCell(Worksheet worksheet, string cellName)
{
string columnName = GetColumnName(cellName);
uint rowIndex = 2;
IEnumerable<Row> rows = worksheet.Descendants<Row>().Where(r => r
.RowIndex.Value == rowIndex);
Row row = rows.First();
IEnumerable<Cell> cells = row.Elements<Cell>().Where(c => c.CellReference
.Value == cellName);
}
// Parse the cell name to get the column name.
private static string GetColumnName(string cellName)
{
// Create a regular expression to match the column name portion of the cell name.
Regex regex = new Regex("[A-Za-z]+");
Match match = regex.Match(cellName);
return match.Value;
}
}
}
Imports System.Collections.Generic
Imports System.Linq
Imports DocumentFormat.OpenXml
Imports DocumentFormat.OpenXml.Packaging
Imports DocumentFormat.OpenXml.Spreadsheet
Imports System.Text.RegularExpressions
Module Module1
' Merge two adjacent cells in a worksheet.
' Notice that after the merge, only the content from one cell is preserved.
Sub Main(ByVal args As String())
Dim docName As String = "C:\Users\Public\Documents\MergeCellsEx.xlsx"
Dim sheetName As String = "mySheet"
Dim cell1Name As String = "A2"
Dim cell2Name As String = "B2"
Using document As SpreadsheetDocument = SpreadsheetDocument.Open(docName, True)
Dim worksheet As Worksheet = GetWorksheet(document, sheetName)
' Create Spreadsheet cells.
CreateSpreadsheetCell(worksheet, cell1Name)
CreateSpreadsheetCell(worksheet, cell2Name)
Dim mergeCells As MergeCells
If worksheet.Elements(Of MergeCells)().Count() > 0 Then
mergeCells = worksheet.Elements(Of MergeCells)().First()
Else
mergeCells = New MergeCells()
' Insert a MergeCells object into the specified position.
If worksheet.Elements(Of CustomSheetView)().Count() > 0 Then
worksheet.InsertAfter(mergeCells, worksheet.Elements(Of CustomSheetView)().First())
Else
worksheet.InsertAfter(mergeCells, worksheet.Elements(Of SheetData)().First())
End If
End If
' Create the merged cell and append it to the MergeCells collection.
Dim mergeCell As New MergeCell() With { _
.Reference = New StringValue(cell1Name & ":" & cell2Name) _
}
mergeCells.Append(mergeCell)
worksheet.Save()
End Using
Console.WriteLine("The two cells are now merged." & vbLf & "Press a key.")
Console.ReadKey()
End Sub
' Get the specified worksheet.
Private Function GetWorksheet(ByVal document As SpreadsheetDocument, ByVal worksheetName As String) As Worksheet
Dim sheets As IEnumerable(Of Sheet) = document.WorkbookPart.Workbook.Descendants(Of Sheet)().Where(Function(s) s.Name = worksheetName)
Dim worksheetPart As WorksheetPart = DirectCast(document.WorkbookPart.GetPartById(sheets.First().Id), WorksheetPart)
Return worksheetPart.Worksheet
End Function
' Create a spreadsheet cell.
Private Sub CreateSpreadsheetCell(ByVal worksheet As Worksheet, ByVal cellName As String)
Dim columnName As String = GetColumnName(cellName)
Dim rowIndex As UInteger = 2
Dim rows As IEnumerable(Of Row) = worksheet.Descendants(Of Row)().Where(Function(r) r.RowIndex.Value = rowIndex)
Dim row As Row = rows.First()
Dim cells As IEnumerable(Of Cell) = row.Elements(Of Cell)().Where(Function(c) c.CellReference.Value = cellName)
End Sub
' Parse the cell name to get the column name.
Private Function GetColumnName(ByVal cellName As String) As String
' Create a regular expression to match the column name portion of the cell name.
Dim regex As New Regex("[A-Za-z]+")
Dim match As Match = regex.Match(cellName)
Return match.Value
End Function
End Module
Remarks
[ISO/IEC 29500-1 1st Edition]
mergeCells (Merge Cells)
This collection expresses all the merged cells in the sheet.
[Example:
This example shows that three ranges are merged. The formatting and content for the merged range is always stored in the top left cell.
<mergeCells>
<mergeCell ref="C2:F2"/>
<mergeCell ref="B19:C20"/>
<mergeCell ref="E19:G19"/>
</mergeCells>
end example]
Parent Elements |
---|
worksheet (§18.3.1.99) |
Child Elements | Subclause |
---|---|
mergeCell (Merged Cell) | §18.3.1.54 |
Attributes | Description |
---|---|
count (Count) | A count of merged cell collections. The possible values for this attribute are defined by the W3C XML Schema unsignedInt datatype. |
[Note: The W3C XML Schema definition of this element’s content model (CT_MergeCells) is located in §A.2. end note]
� ISO/IEC29500: 2008.
Constructors
MergeCells() |
Initializes a new instance of the MergeCells class. |
MergeCells(IEnumerable<OpenXmlElement>) |
Initializes a new instance of the MergeCells class with the specified child elements. |
MergeCells(OpenXmlElement[]) |
Initializes a new instance of the MergeCells class with the specified child elements. |
MergeCells(String) |
Initializes a new instance of the MergeCells class from outer XML. |
Properties
ChildElements |
Gets all the child nodes of the current element. (Inherited from OpenXmlElement) |
Count |
Count Represents the following attribute in the schema: count |
ExtendedAttributes |
Gets all extended attributes (attributes not defined in the schema) of the current element. (Inherited from OpenXmlElement) |
Features |
Gets a IFeatureCollection for the current element. This feature collection will be read-only, but will inherit features from its parent part and package if available. (Inherited from OpenXmlElement) |
FirstChild |
Gets the first child of the current OpenXmlElement element. (Inherited from OpenXmlCompositeElement) |
HasAttributes |
Gets a value indicating whether the current element has any attributes. (Inherited from OpenXmlElement) |
HasChildren |
Gets a value that indicates whether the current element has any child elements. (Inherited from OpenXmlCompositeElement) |
InnerText |
Gets or sets the concatenated values of the current node and all of its children. (Inherited from OpenXmlCompositeElement) |
InnerXml |
Gets or sets the markup that represents only the child nodes of the current node. (Inherited from OpenXmlCompositeElement) |
LastChild |
Gets the last child of the current OpenXmlElement element. Returns null (Nothing in Visual Basic) if there is no such OpenXmlElement element. (Inherited from OpenXmlCompositeElement) |
LocalName | |
LocalName |
Gets the local name of the current element. (Inherited from OpenXmlElement) |
MCAttributes |
Gets or sets the markup compatibility attributes. Returns null if no markup compatibility attributes are defined for the current element. (Inherited from OpenXmlElement) |
NamespaceDeclarations |
Gets all the namespace declarations defined in the current element. Returns an empty enumerator if there is no namespace declaration. (Inherited from OpenXmlElement) |
NamespaceUri |
Gets the namespace URI of the current element. (Inherited from OpenXmlElement) |
OpenXmlElementContext |
Gets the OpenXmlElementContext of the current element. (Inherited from OpenXmlElement) |
OuterXml |
Gets the markup that represents the current element and all of its child elements. (Inherited from OpenXmlElement) |
Parent |
Gets the parent element of the current element. (Inherited from OpenXmlElement) |
Prefix |
Gets the namespace prefix of current element. (Inherited from OpenXmlElement) |
XmlQualifiedName |
Gets the qualified name of the current element. (Inherited from OpenXmlElement) |
XName |
Gets the qualified name of the current element. (Inherited from OpenXmlElement) |
Methods
AddAnnotation(Object) |
Adds an object to the current OpenXmlElement element's list of annotations. (Inherited from OpenXmlElement) |
AddChild(OpenXmlElement, Boolean) |
Adds the specified element to the element if it is a known child. This adds the element in the correct location according to the schema. (Inherited from OpenXmlCompositeElement) |
AddNamespaceDeclaration(String, String) |
Adds a namespace declaration to the current node. (Inherited from OpenXmlElement) |
Ancestors() |
Enumerates all of the current element's ancestors. (Inherited from OpenXmlElement) |
Ancestors<T>() |
Enumerates only the current element's ancestors that have the specified type. (Inherited from OpenXmlElement) |
Annotation(Type) |
Get the first annotation object of the specified type from the current OpenXmlElement element. (Inherited from OpenXmlElement) |
Annotation<T>() |
Get the first annotation object of the specified type from the current OpenXmlElement element. (Inherited from OpenXmlElement) |
Annotations(Type) |
Gets a collection of annotations with the specified type for the current OpenXmlElement element. (Inherited from OpenXmlElement) |
Annotations<T>() |
Gets a collection of annotations with the specified type for the current OpenXmlElement element. (Inherited from OpenXmlElement) |
Append(IEnumerable<OpenXmlElement>) |
Appends each element from a list of elements to the end of the current element's list of child elements. (Inherited from OpenXmlElement) |
Append(OpenXmlElement[]) |
Appends each element from an array of elements to the end of the current element's list of child elements. (Inherited from OpenXmlElement) |
AppendChild<T>(T) |
Appends the specified element to the end of the current element's list of child nodes. (Inherited from OpenXmlCompositeElement) |
ClearAllAttributes() |
Clears all of the attributes, including both known attributes and extended attributes. (Inherited from OpenXmlElement) |
Clone() |
Creates a duplicate of the current node. (Inherited from OpenXmlElement) |
CloneNode(Boolean) |
Creates a duplicate of this node. |
Descendants() |
Enumerates all of the current element's descendants. (Inherited from OpenXmlElement) |
Descendants<T>() |
Enumerate all of the current element's descendants of type T. (Inherited from OpenXmlElement) |
Elements() |
Enumerates all of the current element's children. (Inherited from OpenXmlElement) |
Elements<T>() |
Enumerates only the current element's children that have the specified type. (Inherited from OpenXmlElement) |
ElementsAfter() |
Enumerates all of the sibling elements that follow the current element and have the same parent as the current element. (Inherited from OpenXmlElement) |
ElementsBefore() |
Enumerates all of the sibling elements that precede the current element and have the same parent as the current element. (Inherited from OpenXmlElement) |
GetAttribute(String, String) |
Gets an Open XML attribute with the specified tag name and namespace URI. (Inherited from OpenXmlElement) |
GetAttributes() |
Gets a list that contains a copy of all the attributes. (Inherited from OpenXmlElement) |
GetEnumerator() |
Returns an enumerator that iterates through the child collection. (Inherited from OpenXmlElement) |
GetFirstChild<T>() |
Finds the first child element in type T. (Inherited from OpenXmlElement) |
InsertAfter<T>(T, OpenXmlElement) |
Inserts the specified element immediately after the specified reference element. (Inherited from OpenXmlCompositeElement) |
InsertAfterSelf<T>(T) |
Inserts the specified element immediately after the current element. (Inherited from OpenXmlElement) |
InsertAt<T>(T, Int32) |
Inserts the specified element at the specified index of the current element's children. (Inherited from OpenXmlCompositeElement) |
InsertBefore<T>(T, OpenXmlElement) |
Inserts the specified element immediately before the specified reference element. (Inherited from OpenXmlCompositeElement) |
InsertBeforeSelf<T>(T) |
Inserts the specified element immediately before the current element. (Inherited from OpenXmlElement) |
IsAfter(OpenXmlElement) |
Determines if the current element appears after a specified element in document order. (Inherited from OpenXmlElement) |
IsBefore(OpenXmlElement) |
Determines if the current element appears before a specified element in document order. (Inherited from OpenXmlElement) |
LookupNamespace(String) |
Resolves the namespace prefix in the context of the current node. (Inherited from OpenXmlElement) |
LookupPrefix(String) |
Finds the corresponding prefix for a namespace uri in the current element scope. (Inherited from OpenXmlElement) |
NextSibling() |
Gets the OpenXmlElement element that immediately follows the current OpenXmlElement element. Returns null (Nothing in Visual Basic) if there is no next OpenXmlElement element. (Inherited from OpenXmlElement) |
NextSibling<T>() |
Gets the OpenXmlElement element with the specified type that follows the current OpenXmlElement element. Returns null (Nothing in Visual Basic) if there is no next OpenXmlElement. (Inherited from OpenXmlElement) |
PrependChild<T>(T) |
Inserts the specified element at the beginning of the current element's list of child nodes. (Inherited from OpenXmlCompositeElement) |
PreviousSibling() |
Gets the OpenXmlElement element that immediately precedes the current OpenXmlElement element. Returns null (Nothing in Visual Basic ) if there is no preceding OpenXmlElement element. (Inherited from OpenXmlElement) |
PreviousSibling<T>() |
Gets the OpenXmlElement element with the specified type that precedes the current OpenXmlElement. Returns null (Nothing in Visual Basic) if there is no preceding OpenXmlElement element. (Inherited from OpenXmlElement) |
Remove() |
Removes the current element from its parent. (Inherited from OpenXmlElement) |
RemoveAllChildren() |
Removes all of the current element's child elements. (Inherited from OpenXmlCompositeElement) |
RemoveAllChildren<T>() |
Remove all of the current element's child elements that are of type T. (Inherited from OpenXmlElement) |
RemoveAnnotations(Type) |
Removes the annotations of the specified type from the current OpenXmlElement element. (Inherited from OpenXmlElement) |
RemoveAnnotations<T>() |
Removes the annotations with the specified type from the current OpenXmlElement element. (Inherited from OpenXmlElement) |
RemoveAttribute(String, String) |
Removes the attribute from the current element. (Inherited from OpenXmlElement) |
RemoveChild<T>(T) |
Removes the specified child element. (Inherited from OpenXmlCompositeElement) |
RemoveNamespaceDeclaration(String) |
Removes the namespace declaration for the specified prefix. Removes nothing if there is no prefix. (Inherited from OpenXmlElement) |
ReplaceChild<T>(OpenXmlElement, T) |
Replaces one of the current element's child elements with another OpenXmlElement element. (Inherited from OpenXmlCompositeElement) |
SetAttribute(OpenXmlAttribute) |
Sets an attribute to the specified element. If the attribute is a known attribute, the value of the attribute is set. If the attribute is an extended attribute, the 'openxmlAttribute' is added to the extended attributes list. (Inherited from OpenXmlElement) |
SetAttributes(IEnumerable<OpenXmlAttribute>) |
Sets a number of attributes to the element. If an attribute is a known attribute, the value of the attribute is set. If an attribute is an extended attribute, the 'openxmlAttribute' is added to the extended attributes list. (Inherited from OpenXmlElement) |
WriteTo(XmlWriter) |
Saves the current node to the specified XmlWriter. (Inherited from OpenXmlElement) |
Explicit Interface Implementations
IEnumerable.GetEnumerator() | (Inherited from OpenXmlElement) |
IEnumerable<OpenXmlElement>.GetEnumerator() |
Returns an enumerator that iterates through the child collection. (Inherited from OpenXmlElement) |