Объединение ячеек Excel в C#

285
06 января 2018, 00:19

В общем-то создаю программно Excel файл и записываю в него данные. Как объединить несколько ячеек в одну?

Вот так происходит создание и запись у меня:

    private void CreateExcelDocument()
    {
        excelApp = new Excel.Application();
        FileInfo fileInfo = new FileInfo(Application.StartupPath + "\\" + DateTime.Now.Year.ToString() + " " + DateTime.Now.Month.ToString() + ".xlsx");
        if (fileInfo.Exists)
        {
            excelApp.Workbooks.Open(fileInfo.FullName);
            workSheet = (Excel.Worksheet)excelApp.ActiveSheet;
            curRow = workSheet.UsedRange.Rows.Count;
        }
        else
        {
            excelApp.Workbooks.Add();
            workSheet = (Excel.Worksheet)excelApp.ActiveSheet;
            curRow = 2;
            workSheet.Cells[1, 8] = "Общая";
            workSheet.Cells[1, 9] = "Общая";
            workSheet.Cells[1, 10] = "Общая";
            workSheet.Cells[1, 11] = "Общая";
            workSheet.Cells[1, 15] = "Общая";
            workSheet.Cells[1, 16] = "Общая";
            workSheet.Cells[1, 17] = "Общая";
            workSheet.Cells[2, 1] = "ФИО";
            workSheet.Cells[2, 2] = "Данные1";
            workSheet.Cells[2, 3] = "Данные2";
            workSheet.Cells[2, 4] = "Данные3";
            workSheet.Cells[2, 5] = "Данные4";
            workSheet.Cells[2, 6] = "Данные5";
            workSheet.Cells[2, 7] = "Данные6";
            workSheet.Cells[2, 8] = "Данные7";
            workSheet.Cells[2, 9] = "Данные8";
            workSheet.Cells[2, 10] = "Данные9";
            workSheet.Cells[2, 11] = "Данные10";
            workSheet.Cells[2, 12] = "Данные11";
            workSheet.Cells[2, 13] = "Данные12";
            workSheet.Cells[2, 14] = "Данные13";
            workSheet.Cells[2, 15] = "Данные14";
            workSheet.Cells[2, 16] = "Данные15";
            workSheet.Cells[2, 17] = "Данные16";
        }
    }
    private void SaveAndQuit()
    {
        try
        {
            excelApp.ActiveWorkbook.SaveAs(Application.StartupPath + "\\" + DateTime.Now.Year.ToString() + " " + DateTime.Now.Month.ToString());
            excelApp.Quit();
        }
        catch (Exception e)
        {
            excelApp.Quit();
        }
    }
    private void WriteToExcel()
    {
        int i = 0;
        curRow++;
        i++;
        workSheet.Cells[curRow, i] = RashodMatTextBoxFamil.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 2
        workSheet.Cells[curRow, i] = label123.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 3
        workSheet.Cells[curRow, i] = label124.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 4
        workSheet.Cells[curRow, i] = label125.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 5
        workSheet.Cells[curRow, i] = label126.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 6
        workSheet.Cells[curRow, i] = label127.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 7
        workSheet.Cells[curRow, i] = label128.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 8
        workSheet.Cells[curRow, i] = label129.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 9
        workSheet.Cells[curRow, i] = label130.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 10
        workSheet.Cells[curRow, i] = label131.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 11
        workSheet.Cells[curRow, i] = label143.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 12
        workSheet.Cells[curRow, i] = label132.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 13
        workSheet.Cells[curRow, i] = label133.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 14
        workSheet.Cells[curRow, i] = label135.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 15
        workSheet.Cells[curRow, i] = label138.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 16
        workSheet.Cells[curRow, i] = label137.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
        i++;    // 17
        workSheet.Cells[curRow, i] = label136.Text;
        ((Excel.Range)workSheet.Columns[i]).AutoFit();
    }

Объединить нужно ячейки H1-K1 и O1-Q1, подскажите как это делается программно. Буду очень благодарен

Answer 1

Попробуй так:

// Выделяем диапазон ячеек от H1 до K1         
Excel.Range _excelCells1 = (Excel.Range)workSheet.get_Range("H1", "K1").Cells;
// Производим объединение
_excelCells1.Merge(Type.Missing);
workSheet.Cells[1, 8] = "Общие";
// Выделяем диапазон ячеек от O1 до Q1         
Excel.Range _excelCells2 = (Excel.Range)workSheet.get_Range("O1", "Q1").Cells;
// Производим объединение
_excelCells2.Merge(Type.Missing);
workSheet.Cells[1, 15] = "Общие";
READ ALSO
Заглавная буква в каждом слове

Заглавная буква в каждом слове

Задание такое: Создать программу, состоящую из textBox и кнопкиВ textBox вводятся любые слова в любом регистре, по нажатию на кнопку происходит запись...

246
Как выполнять код отдельно от форм

Как выполнять код отдельно от форм

Изначально, когда создаешь проект (а именно Приложение Windows Forms), доступен для редактирования файл Form1cs

246
Обработка исключений другого потока

Обработка исключений другого потока

В ViewModel имеется команда, которая запускает загрузку данных с порта и расшифровку их:

218
Импорт и экспорт в xml , json, yml [требует правки]

Импорт и экспорт в xml , json, yml [требует правки]

Необходимо экспортировать и импортировать в три формата (xml , json, yml)Как лучше это сделать? Помогите с примером и советом

177