Создание файлов Excel на C++

Ранее я написал сообщение о том, как реализовать функции автоматизации Excel и создать файлы Excel XLS/XLSX с нуля с помощью C#. Сегодня я покажу вам, как создавать рабочие книги Excel, вставлять данные в рабочие листы Excel, вычислять формулы и создавать диаграммы и таблицы на рабочих листах с помощью C++. Все функции автоматизации электронных таблиц будут работать на C++ Excel API — Aspose.Cells for C++.

Aspose.Cells for C++ — это собственная библиотека C++, которая позволяет создавать, читать, анализировать и преобразовывать электронные таблицы без использования Microsoft Excel. Он предоставляет полный набор функций автоматизации Excel, которые можно использовать для создания электронных таблиц XLS/XLSX и управления ими. В этой статье мы рассмотрим следующие возможности создания файлов Excel XLS/XLSX с нуля.

C++ API электронных таблиц Excel — установка

Вы можете скачать полный пакет файлов библиотеки Aspose.Cells для C++ из раздела Загрузки. Пакет также содержит готовый к запуску образец консольного приложения.

Создание файлов Excel (XLS/XLSX) с использованием C++

Давайте сначала создадим простую книгу Excel XLSX с нуля. Рабочая книга состоит из одного или нескольких рабочих листов, и каждый рабочий лист содержит данные в виде строк и столбцов. Поэтому, чтобы создать электронную таблицу Excel, вам нужно сначала создать книгу, а затем добавить в нее рабочие листы. Ниже приведены шаги по созданию файла Excel с использованием Aspose.Cells для C++.

  • Создайте объект класса IWorkbook.
  • Получите первый рабочий лист (созданный по умолчанию) книги в объект IWorksheet из IWorksheetCollection.
  • Получите доступ к ячейкам рабочего листа в объект ICells с помощью метода IWorksheet->GetICells().
  • Получите доступ к нужной ячейке рабочего листа в объект ICell с помощью метода ICells->GetObjectByIndex(), указав индекс строки и столбца.
  • Добавьте значение в ячейку, используя метод ICell->PutValue().
  • Сохраните книгу как файл .xlsx, используя метод IWorkbook->Save().

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

/*create a new workbook*/
intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();

/*get the first worksheet*/
intrusive_ptr<IWorksheetCollection> wsc = wb->GetIWorksheets();
intrusive_ptr<IWorksheet> ws = wsc->GetObjectByIndex(0);

/*get cell(0,0)*/
intrusive_ptr<ICells> cells = ws->GetICells();
intrusive_ptr<ICell> cell = cells->GetObjectByIndex(0, 0);

/*write "Hello World" to cell(0,0) of the first sheet*/
intrusive_ptr<String> str = new String("Hello World!");
cell->PutValue(str);

/*save this workbook to resultFile folder*/
wb->Save(resultPath->StringAppend(new String("workbook.xlsx")));

Книга Excel

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

Создать Excel XLSX на C++

Добавить данные на лист Excel с помощью C++

В предыдущем примере мы увидели, как создать простой файл Excel и вставить значение в определенную ячейку, используя индекс строки и столбца. Однако чаще всего ячейки в рабочих листах Excel идентифицируются с помощью букв столбцов и номеров строк, таких как A1, A2, B1 и т. д. Итак, давайте рассмотрим пример того, как вставлять данные в рабочий лист, используя имена ячеек. Процесс отличается только добавлением значения в ячейку, а все остальные шаги создания книги и листов Excel одинаковы.

В следующем примере кода показано, как создать книгу Excel XLSX и вставить в нее данные с помощью C++.

//Путь к выходному файлу excel
StringPtr outputData = resultPath->StringAppend(new String("outputData.xlsx"));

//Чтение входного файла excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

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

//Добавление строкового значения в ячейку
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue("Hello World");

//Добавление двойного значения в ячейку
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(20.5);

//Добавление целочисленного значения в ячейку
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(15);

//Добавление логического значения в ячейку
worksheet->GetICells()->GetObjectByIndex(new String("A4"))->PutValue(true);

//Настройка формата отображения даты
intrusive_ptr<ICell> cell = worksheet->GetICells()->GetObjectByIndex(new String("A5"));
intrusive_ptr<IStyle> style = cell->GetIStyle();
style->SetNumber(15);
cell->SetIStyle(style);

//Сохраните книгу
workbook->Save(outputData);

Вычислить формулы рабочей книги с помощью C++

Настройка формул в книгах Excel — это замечательная функция для выполнения вычислений с данными. Это значительно упрощает эффективное и действенное выполнение сложных вычислений с данными. Ниже приведены шаги для установки и расчета формул на листах Excel.

  • Создайте объект класса IWorkbook.
  • Получите рабочий лист в объект IWorksheet из IWorksheetCollection.
  • Используйте класс ICell для доступа к ячейке, к которой вы хотите применить формулу.
  • Установите формулу для ячейки с помощью метода ICell->SetFormula().
  • Вычислите формулу методом IWorkbook->CalculateFormula().
  • Сохраните книгу, используя метод IWorkbook->Save().

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

//Создать новую книгу
intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();

//Получить первый рабочий лист, созданный по умолчанию
intrusive_ptr<IWorksheet> ws = wb->GetIWorksheets()->GetObjectByIndex(0);

//Добавление значения в ячейку «A1»
intrusive_ptr<ICell> cell = ws->GetICells()->GetObjectByIndex(new String("A1"));
cell->PutValue(5);

//Добавление значения в ячейку «A2»
cell = ws->GetICells()->GetObjectByIndex(new String("A2"));
cell->PutValue(15);

//Добавление значения в ячейку «A3»
cell = ws->GetICells()->GetObjectByIndex(new String("A3"));
cell->PutValue(25);

//Добавление формулы СУММ в ячейку «А4»
cell = ws->GetICells()->GetObjectByIndex(new String("A4"));
cell->SetFormula(new String("=SUM(A1:A3)"));

//Вычисление результатов формул
wb->CalculateFormula();

//Получите вычисленное значение ячейки «А4» и распечатайте его на консоли.
cell = ws->GetICells()->GetObjectByIndex(new String("A4"));
StringPtr sCalcuInfo = new String(L"Calculated Value of Cell A4: ");
Console::WriteLine(sCalcuInfo->StringAppend(cell->GetStringValue()));

Создание таблиц на листе Excel с помощью C++

Таблицы на листах Excel используются для организации группы данных, расположенных в диапазоне ячеек. Таблицы также помогают поддерживать различные типы списков на листах. Ниже приведены шаги для создания таблицы на листе Excel.

  • Создайте новую книгу Excel, используя класс IWorkbook.
  • Получите доступ к рабочему листу по умолчанию в объекте IWorksheet или добавьте новый.
  • Вставьте значение/данные в ячейки так же, как в предыдущем примере.
  • Добавьте диапазон ячеек в коллекцию списков рабочего листа, используя метод IWorksheet->GetIListObjects()->Add().
  • Получить список в объект IListObject.
  • Примените стиль к таблице с помощью метода IListObject->SetTableStyleType().
  • Сохраните книгу как файл .xlsx.

В следующем примере кода показано, как создать таблицу в файле Excel XLSX с помощью C++.

// Создать экземпляр объекта Workbook
intrusive_ptr<IWorkbook>  workbook = Factory::CreateIWorkbook();

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

// Получение коллекции ячеек рабочего листа
intrusive_ptr<ICells> cells = worksheet->GetICells();

// Установка значения в ячейки
cells->GetObjectByIndex(new String("A1"))->PutValue("Employee");
cells->GetObjectByIndex(new String("B1"))->PutValue("Quarter");
cells->GetObjectByIndex(new String("C1"))->PutValue("Product");
cells->GetObjectByIndex(new String("D1"))->PutValue("Continent");
cells->GetObjectByIndex(new String("E1"))->PutValue("Country");
cells->GetObjectByIndex(new String("F1"))->PutValue("Sale");

cells->GetObjectByIndex(new String("A2"))->PutValue("David");
cells->GetObjectByIndex(new String("A3"))->PutValue("David");
cells->GetObjectByIndex(new String("A4"))->PutValue("David");
cells->GetObjectByIndex(new String("A5"))->PutValue("David");
cells->GetObjectByIndex(new String("A6"))->PutValue("James"); 

cells->GetObjectByIndex(new String("B2"))->PutValue(1);
cells->GetObjectByIndex(new String("B3"))->PutValue(2);
cells->GetObjectByIndex(new String("B4"))->PutValue(3);
cells->GetObjectByIndex(new String("B5"))->PutValue(4);
cells->GetObjectByIndex(new String("B6"))->PutValue(1); 

cells->GetObjectByIndex(new String("C2"))->PutValue("Maxilaku");
cells->GetObjectByIndex(new String("C3"))->PutValue("Maxilaku");
cells->GetObjectByIndex(new String("C4"))->PutValue("Chai");
cells->GetObjectByIndex(new String("C5"))->PutValue("Maxilaku");
cells->GetObjectByIndex(new String("C6"))->PutValue("Chang"); 

cells->GetObjectByIndex(new String("D2"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D3"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D4"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D5"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D6"))->PutValue("Europe"); 

cells->GetObjectByIndex(new String("E2"))->PutValue("China");
cells->GetObjectByIndex(new String("E3"))->PutValue("India");
cells->GetObjectByIndex(new String("E4"))->PutValue("Korea");
cells->GetObjectByIndex(new String("E5"))->PutValue("India");
cells->GetObjectByIndex(new String("E6"))->PutValue("France"); 

cells->GetObjectByIndex(new String("F2"))->PutValue(2000);
cells->GetObjectByIndex(new String("F3"))->PutValue(500);
cells->GetObjectByIndex(new String("F4"))->PutValue(1200);
cells->GetObjectByIndex(new String("F5"))->PutValue(1500);
cells->GetObjectByIndex(new String("F6"))->PutValue(500);  


// Добавление нового объекта списка на лист
worksheet->GetIListObjects()->Add(new String("A1"), new String("F6"), true);
intrusive_ptr<IListObject> listObject = worksheet->GetIListObjects()->GetObjectByIndex(0);

// Добавление стиля по умолчанию в таблицу
listObject->SetTableStyleType(TableStyleType_TableStyleMedium10);

// Показать итог
listObject->SetShowTotals(true);

// Сохранение файла Excel
workbook->Save(resultPath->StringAppend(new String("Excel_Table.xlsx")));

Книга Excel с таблицей

Создать таблицу в Excel на С++

Создание диаграмм в электронной таблице Excel с использованием C++

Диаграммы в электронных таблицах Excel используются для визуализации данных с использованием различных типов графических объектов. Они дают нам быстрое представление и понимание данных, особенно когда данные огромны. Aspose.Cells для C++ поддерживает множество диаграмм, включая Sunburst, Treemap, Histogram, Pyramid, Bubble, Line и многие другие. Ниже приведены шаги по созданию диаграммы в книге Excel с использованием Aspose.Cells для C++.

  • Создайте новую книгу Excel.
  • Получите доступ к нужному рабочему листу в объекте IWorksheet.
  • Добавьте новую диаграмму на рабочий лист, используя метод IWorksheet->GetICharts()->Add(), передав тип диаграммы.
  • Получите доступ к недавно добавленной диаграмме в объект IChart.
  • Задайте источник данных для диаграммы с помощью метода IChart->GetNISeries()->Add().
  • Сохраните книгу как файл .xlsx.

В следующем примере кода показано, как создать диаграмму в файле Excel XLSX с помощью C++.

// Путь к выходному файлу excel
StringPtr outputChartTypePyramid = resultPath->StringAppend(new String("Exce_Pyramid_Chart.xlsx"));

// Создать новую книгу
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Получить первый рабочий лист, созданный по умолчанию
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Добавление образцов значений в ячейки
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue(50);
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(100);
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(150);
worksheet->GetICells()->GetObjectByIndex(new String("B1"))->PutValue(4);
worksheet->GetICells()->GetObjectByIndex(new String("B2"))->PutValue(20);
worksheet->GetICells()->GetObjectByIndex(new String("B3"))->PutValue(50);

// Добавление диаграммы на рабочий лист
int chartIndex = worksheet->GetICharts()->Add(Aspose::Cells::Charts::ChartType::ChartType_Pyramid, 5, 0, 20, 8);

// Доступ к экземпляру вновь добавленной диаграммы
intrusive_ptr<Aspose::Cells::Charts::IChart> chart = worksheet->GetICharts()->GetObjectByIndex(chartIndex);

// Добавление SeriesCollection (источника данных диаграммы) на диаграмму в диапазоне от ячейки "A1" до "B3"
chart->GetNISeries()->Add(new String("A1:B3"), true);

// Сохранение файла Excel
workbook->Save(outputChartTypePyramid);

Книга Excel с диаграммой

Создать диаграмму в Excel на С++

Вывод

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

Связанная статья