Ранее я написал сообщение о том, как реализовать функции автоматизации 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 с нуля.
- Создавайте файлы Excel (XLS/XLSX) с помощью C++
- Добавить данные на лист Excel с помощью C++
- Вычислять формулы рабочей книги с помощью C++
- Создание таблиц на листе Excel с помощью C++
- Создание диаграмм в Excel XLS/XLSX с использованием C++
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 с помощью 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 с использованием 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 с диаграммой
Вывод
В этой статье мы рассмотрели, как создавать электронные таблицы MS Excel с нуля с помощью C++. Статья также содержит пошаговые инструкции и примеры кода о том, как создавать таблицы, диаграммы и вычислять формулы на листах Excel. Вы можете узнать больше о других расширенных функциях, связанных с автоматизацией Excel, из документации Aspose.Cells for C++.