web-dev-qa-db-fra.com

Créer des cellules de fusion à l'aide d'OpenXML

Veuillez considérer cet Excel:

enter image description here

et c'est XML:

enter image description here

Je veux créer un tel Excel qui a plusieurs cellules fusionnées à l'aide d'OpenXML.

Comment puis-je faire ceci?

merci

13
Arian

Vous pouvez utiliser les classes MergeCells et MergeCell pour créer les cellules fusionnées dont vous avez besoin. La classe MergeCells est la collection de cellules de fusion (<mergeCells count="3"> dans votre XML) et la classe MergeCell représente chaque ensemble individuel de cellules fusionnées (<mergeCell ref="xx:xx" /> dans votre XML). Pour remplir les données dans les cellules fusionnées, vous devez ajouter la valeur à la cellule supérieure gauche; toutes les autres valeurs seront ignorées.

Le code suivant créera un nouveau fichier avec des cellules fusionnées.

using (SpreadsheetDocument myDoc = SpreadsheetDocument.Create(filename, SpreadsheetDocumentType.Workbook))
{
    WorkbookPart workbookpart = myDoc.AddWorkbookPart();
    workbookpart.Workbook = new Workbook();

    // Add a WorksheetPart to the WorkbookPart.
    WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();

    SheetData sheetData = new SheetData();

    //add a row
    Row firstRow = new Row();
    firstRow.RowIndex = (UInt32)1;

    //create a cell in C1 (the upper left most cell of the merged cells)
    Cell dataCell = new Cell();
    dataCell.CellReference = "C1";
    CellValue cellValue = new CellValue();
    cellValue.Text = "99999";
    dataCell.Append(cellValue);

    firstRow.AppendChild(dataCell);

    sheetData.AppendChild(firstRow);
    // Add a WorkbookPart to the document.
    worksheetPart.Worksheet = new Worksheet(sheetData);

    //create a MergeCells class to hold each MergeCell
    MergeCells mergeCells = new MergeCells();

    //append a MergeCell to the mergeCells for each set of merged cells
    mergeCells.Append(new MergeCell() { Reference = new StringValue("C1:F1") });
    mergeCells.Append(new MergeCell() { Reference = new StringValue("A3:B3") });
    mergeCells.Append(new MergeCell() { Reference = new StringValue("G5:K5") });

    worksheetPart.Worksheet.InsertAfter(mergeCells, worksheetPart.Worksheet.Elements<SheetData>().First());

    //this is the part that was missing from your code
    Sheets sheets = myDoc.WorkbookPart.Workbook.AppendChild(new Sheets());
    sheets.AppendChild(new Sheet()
    {
        Id = myDoc.WorkbookPart.GetIdOfPart(myDoc.WorkbookPart.WorksheetParts.First()),
        SheetId = 1,
        Name = "Sheet1"
    });
}

Le code ci-dessus produit:

enter image description here

24
petelids