如何在电子表格中多次合并行?

时间:2019-05-08 08:38:31

标签: c# spreadsheet openxml export-to-excel

我必须通过C#在电子表格中多次合并单元格。

下面的示例是我尝试过的代码。如果仅给出一个条件 if (cellNameWorkOrder == "POSTER: 10% MUST HAVE APPROACH AND CLOSE-UP SHOTS - PHOTO OF EACH CREATIVE"),则该方法有效 但是,当我将OR条件设置为电子表格表时,下载表后它已损坏。

if (cellNameWorkOrder == "POSTER: 10% MUST HAVE APPROACH AND CLOSE-UP SHOTS - PHOTO OF EACH CREATIVE" || cellNameWorkOrder == "BULLETINS: 100% CLOSE-UP AND APPROACH OF EACH UNIT")
using (var workbook = SpreadsheetDocument.Create(Savepath, SpreadsheetDocumentType.Workbook))
{
    var workbookPart = workbook.AddWorkbookPart();
    workbook.WorkbookPart.Workbook = new Workbook();
    workbook.WorkbookPart.Workbook.Sheets = new Sheets();
    foreach (DataRow dsrow in table.Rows)
    {
        int innerColIndex = 0;
        rowIndex++;
        Row newRow = new Row();
        foreach (String col in columns)
        {
            Stylesheet stylesheet1 = new Stylesheet();
            Cell cell = new Cell();
            cell.DataType = CellValues.String;
            cell.CellValue = new CellValue(dsrow[col].ToString());
            cell.CellReference = excelColumnNames[innerColIndex] + rowIndex.ToString();

            if (table.TableName == "Work Order Report")
            {

                string cellNameWorkOrder = dsrow[col].ToString();
                if (cellNameWorkOrder == "POSTER: 10% MUST HAVE APPROACH AND CLOSE-UP SHOTS - PHOTO OF EACH CREATIVE" || cellNameWorkOrder == "BULLETINS: 100% CLOSE-UP AND APPROACH OF EACH UNIT")
                {
                    MergeCells mergeCells = new MergeCells();
                    var cellAddress = cell.CellReference;
                    var cellAddressTwo = "I" + rowIndex.ToString();
                    mergeCells.Append(new MergeCell() { Reference = new StringValue(cellAddress + ":" + cellAddressTwo) });
                    sheetPart.Worksheet.InsertAfter(mergeCells, sheetPart.Worksheet.Elements<SheetData>().First());
                }
            }

            newRow.AppendChild(cell);
            innerColIndex++;
        }

        sheetData.AppendChild(newRow);
    }
}

1 个答案:

答案 0 :(得分:1)

工作表中只能有一个MergeCells元素(或没有)。 MergeCells元素应包含您需要的MergeCell元素的全部

很明显,鉴于已有的代码,有很多方法可以实现这一目标,这是其中一种:

using (var workbook = SpreadsheetDocument.Create(Savepath, SpreadsheetDocumentType.Workbook))
{
    var workbookPart = workbook.AddWorkbookPart();
    workbook.WorkbookPart.Workbook = new Workbook();
    workbook.WorkbookPart.Workbook.Sheets = new Sheets();

    //declare our MergeCells here
    MergeCells mergeCells = null;

    foreach (DataRow dsrow in table.Rows)
    {
        int innerColIndex = 0;
        rowIndex++;
        Row newRow = new Row();
        foreach (String col in columns)
        {
            Stylesheet stylesheet1 = new Stylesheet();
            Cell cell = new Cell();
            cell.DataType = CellValues.String;
            cell.CellValue = new CellValue(dsrow[col].ToString());
            cell.CellReference = excelColumnNames[innerColIndex] + rowIndex.ToString();

            if (table.TableName == "Work Order Report")
            {
                string cellNameWorkOrder = dsrow[col].ToString();
                if (cellNameWorkOrder == "POSTER: 10% MUST HAVE APPROACH AND CLOSE-UP SHOTS - PHOTO OF EACH CREATIVE" || cellNameWorkOrder == "BULLETINS: 100% CLOSE-UP AND APPROACH OF EACH UNIT")
                {
                    if (mergeCells == null)
                        mergeCells = new MergeCells();

                    var cellAddress = cell.CellReference;
                    var cellAddressTwo = "I" + rowIndex.ToString();
                    mergeCells.Append(new MergeCell() { Reference = new StringValue(cellAddress + ":" + cellAddressTwo) });
                }
            }

            newRow.AppendChild(cell);
            innerColIndex++;
        }

        sheetData.AppendChild(newRow);
    }
    //add the mergeCells to the worksheet if we have any
    if (mergeCells != null)
        sheetPart.Worksheet.InsertAfter(mergeCells, sheetPart.Worksheet.Elements<SheetData>().First());
}
相关问题