Как я могу объединить строку несколько раз в электронной таблице? - PullRequest
1 голос
/ 08 мая 2019

Я должен объединить ячейку несколько раз в Spread Sheet через C #.

Ниже приведен пример кода, который я пробовал.Это работает, если задано только одно условие if (cellNameWorkOrder == "POSTER: 10% MUST HAVE APPROACH AND CLOSE-UP SHOTS - PHOTO OF EACH CREATIVE"), но когда я ставлю условие ИЛИ, электронная таблица говорит, что она повреждена после загрузки листов.

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 Ответ

1 голос
/ 08 мая 2019

Вы можете иметь только один элемент 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());
}
...