Объединение и разделение ячеек — простая и часто используемая функция Microsoft Excel. Объединение ячеек может оказаться полезным в сценариях, например, когда у вас есть рабочий лист с несколькими столбцами, имеющими один и тот же заголовок. Вы можете объединить ячейки над столбцами, чтобы дать им общий заголовок. Если объединенные ячейки больше не нужны, их можно так же легко разъединить. Вам может понадобиться выполнить эти задачи в ваших приложениях C++. Для этого в этой статье вы узнаете, как программно объединять и разъединять ячейки на листах Excel с помощью C++.

C++ API для объединения и разделения ячеек

Aspose.Cells for C++ — это собственная библиотека C++, которая позволяет создавать, читать и изменять файлы Excel, не требуя установки Microsoft Excel. API также поддерживает объединение и разделение ячеек на листе Excel. Вы можете либо установить API через NuGet, либо загрузить его напрямую из раздела Загрузки.

PM> Install-Package Aspose.Cells.Cpp

Объединить ячейки на листе Excel с помощью C++

В этом примере мы создадим пустой лист Excel и объединим несколько ячеек, выполнив шаги, указанные ниже.

В следующем примере кода показано, как объединить ячейки на листе Excel с помощью C++.

// Выходной путь к каталогу.
StringPtr outDir = new String("OutputDirectory\\");

// Загрузите исходный файл Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Доступ к первому рабочему листу в файле Excel
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Создайте объект Cells, чтобы получить все ячейки.
intrusive_ptr<ICells> cells = worksheet->GetICells();

// Объединить ячейки
cells->Merge(5, 2, 2, 3);

// Поместить данные в ячейку
cells->GetObjectByIndex(5, 2)->PutValue((StringPtr)new String("This is a test value"));

// Создайте объект стиля 
intrusive_ptr<IStyle> style = cells->GetICell(5, 2)->GetIStyle();

// Создайте объект шрифта
intrusive_ptr<Aspose::Cells::IFont> font = style->GetIFont();

// Установите имя
font->SetName(new String("Times New Roman"));

// Установите размер шрифта
font->SetSize(18);

// Установить цвет шрифта
font->SetColor(Systems::Drawing::Color::GetCyan());

// Сделать текст жирным
font->SetBold(true);

// Сделать текст курсивом
font->SetItalic(true);

// Установите цвет переднего плана
style->SetForegroundColor(Systems::Drawing::Color::GetRed());

// Установите шаблон
style->SetPattern(BackgroundType_Solid);

// Применить стиль
cells->GetICell(5, 2)->SetIStyle(style);

// Сохраните файл Excel
workbook->Save(outDir->StringAppend(new String("MergeCells_out.xlsx")));
Изображение выходного файла Excel, созданного с помощью примера кода

Изображение выходного файла Excel, созданного с помощью примера кода

Разъединить ячейки на листе Excel с помощью С++

Ниже приведены шаги для разделения ячеек на листе Excel.

В следующем примере кода показано, как разъединить ячейки на листе Excel с помощью C++.

// Путь к исходному каталогу.
StringPtr srcDir = new String("SourceDirectory\\");

// Выходной путь к каталогу.
StringPtr outDir = new String("OutputDirectory\\");

// Загрузите исходный файл Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(srcDir->StringAppend(new String("SampleMergedCells.xlsx")));

// Доступ к первому рабочему листу в файле Excel
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Создайте объект Cells, чтобы получить все ячейки.
intrusive_ptr<ICells> cells = worksheet->GetICells();

// Разъединить ячейки.
cells->UnMerge(5, 2, 2, 3);

// Сохраните файл Excel
workbook->Save(outDir->StringAppend(new String("UnmergeCells_out.xlsx")));
Изображение выходного файла Excel, созданного с помощью примера кода

Изображение выходного файла Excel, созданного с помощью примера кода

Объединить диапазон ячеек на листе Excel с помощью C++

Ниже приведены шаги для объединения диапазона ячеек на листе Excel.

В следующем примере кода показано, как объединить диапазон ячеек на листе Excel с помощью C++.

// Выходной путь к каталогу.
StringPtr outDir = new String("OutputDirectory\\");

// Загрузите исходный файл Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Доступ к первому рабочему листу в файле Excel
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Введите данные в ячейку A1.
worksheet->GetICells()->GetObjectByIndex(0, 0)->PutValue((StringPtr)new String("This is a test value"));

// Создать диапазон
intrusive_ptr<IRange> range = worksheet->GetICells()->CreateIRange(new String("A1:D4"));

// Объединить диапазон в одну ячейку
range->Merge();

// Сохраните файл Excel
workbook->Save(outDir->StringAppend(new String("MergeRangeOfCells_out.xlsx")));
Изображение выходного файла Excel, созданного с помощью примера кода

Изображение выходного файла Excel, созданного с помощью примера кода

Разъединить диапазон ячеек на листе Excel с помощью С++

Ниже приведены шаги, чтобы разъединить диапазон ячеек на листе Excel.

В следующем примере кода показано, как разъединить диапазон ячеек на листе Excel с помощью C++.

// Путь к исходному каталогу.
StringPtr srcDir = new String("SourceDirectory\\");

// Выходной путь к каталогу.
StringPtr outDir = new String("OutputDirectory\\");

// Загрузите исходный файл Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(srcDir->StringAppend(new String("SampleMergedRangeOfCells.xlsx")));

// Доступ к первому рабочему листу в файле Excel
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Создать диапазон
intrusive_ptr<IRange> range = worksheet->GetICells()->CreateIRange(new String("A1:D4"));

// Разъединить диапазон
range->UnMerge();

// Сохраните файл Excel
workbook->Save(outDir->StringAppend(new String("UnmergeRangeOfCells_out.xlsx")));
Изображение выходного файла Excel, созданного с помощью примера кода

Изображение выходного файла Excel, созданного с помощью примера кода

Объединение ячеек именованного диапазона на листе Excel с использованием C++

Aspose.Cells for C++ также предоставляет вам возможность объединять ячейки именованного диапазона. Для этого выполните шаги, указанные ниже.

В следующем примере кода показано, как объединить ячейки именованного диапазона с помощью C++.

// Путь к исходному каталогу.
StringPtr srcDir = new String("SourceDirectory\\");

// Выходной путь к каталогу.
StringPtr outDir = new String("OutputDirectory\\");

// Загрузите исходный файл Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(srcDir->StringAppend(new String("SampleMergedRangeOfCells.xlsx")));

// Доступ к первому рабочему листу в файле Excel
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Создать диапазон
intrusive_ptr<IRange> range = worksheet->GetICells()->CreateIRange(new String("A1:D4"));

// Установить имя диапазона
range->SetName(new String("Named_Range"));

// Определить объект стиля
intrusive_ptr<IStyle> style = workbook->CreateIStyle();

// Установить горизонтальное выравнивание
style->SetHorizontalAlignment(TextAlignmentType::TextAlignmentType_Center);

// Создайте объект StyleFlag
intrusive_ptr<IStyleFlag> styleFlag = Factory::CreateIStyleFlag();

// Установить горизонтальное выравнивание to true
styleFlag->SetHorizontalAlignment(true);

// Применение стиля к диапазону
range->ApplyIStyle(style, styleFlag);

// Поместите данные в диапазон
range->GetObjectByIndex(0, 0)->PutValue((StringPtr)new String("This is a test value"));

// Объединить диапазон
range->Merge();

// Сохраните файл Excel
workbook->Save(outDir->StringAppend(new String("MergeNamedRange_out.xlsx")));
Изображение выходного файла Excel, созданного с помощью примера кода

Изображение выходного файла Excel, созданного с помощью примера кода

Получить бесплатную лицензию

Вы можете попробовать API без ограничений на пробную версию, запросив бесплатную временную лицензию.

Вывод

В этой статье вы узнали, как объединять и разъединять ячейки на листе Excel с помощью C++. Кроме того, вы увидели, как объединять и разъединять диапазоны и именованные диапазоны с помощью Aspose.Cells for C++ API. API предоставляет множество дополнительных функций для работы с файлами Excel, которые вы можете подробно изучить, посетив официальную документацию. Если у вас возникнут вопросы, свяжитесь с нами на нашем бесплатном форуме поддержки.

Смотрите также