Створення файлів 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++ Excel Spreadsheet API – встановлення

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

Створення файлів Excel (XLS/XLSX) за допомогою C++

Давайте спочатку створимо просту книгу Excel XLSX з нуля. Робоча книга складається з одного або кількох робочих аркушів, і кожен аркуш містить дані у формі рядків і стовпців. Тому, щоб створити електронну таблицю Excel, вам потрібно спочатку створити робочу книгу, а потім додати в неї робочі аркуші. Нижче наведено кроки для створення файлу Excel за допомогою Aspose.Cells for 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);

//Додавання формули SUM до клітинки "A4".
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 або додайте новий.
  • Вставте значення/дані в комірки так само, як у попередньому прикладі.
  • Додайте діапазон комірок до колекції Lists на аркуші за допомогою методу 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 за допомогою C++

Діаграми в електронних таблицях Excel використовуються для візуалізації даних за допомогою різних типів графічних об’єктів. Вони дають нам швидке уявлення та розуміння даних, особливо коли дані величезні. Aspose.Cells for C++ підтримує різноманітні діаграми, включаючи Sunburst, Treemap, Histogram, Pyramid, Bubble, Line та багато інших. Нижче наведено кроки для створення діаграми в книзі Excel за допомогою Aspose.Cells for 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 на C++

Висновок

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

Пов’язана стаття