Vytvářejte soubory Excel v C++

Dříve jsem napsal příspěvek o tom, jak implementovat funkce automatizace Excelu a vytvářet soubory Excel XLS/XLSX od začátku pomocí C#. Dnes vám ukážu, jak vytvářet excelové sešity, vkládat data do excelových listů, počítat vzorce a vytvářet grafy a tabulky v listech pomocí C++. Všechny funkce automatizace tabulek budou poháněny C++ Excel API - Aspose.Cells for C++.

Aspose.Cells for C++ je nativní knihovna C++, která umožňuje vytvářet, číst, analyzovat a převádět tabulkové dokumenty bez nutnosti aplikace Microsoft Excel. Poskytuje kompletní sadu funkcí automatizace Excelu, které lze využít k generování a manipulaci s tabulkami XLS/XLSX. V tomto článku se budeme zabývat následujícími funkcemi vytváření souborů Excel XLS/XLSX od začátku.

C++ Excel Spreadsheet API – instalace

Kompletní balíček knihovních souborů Aspose.Cells for C++ si můžete stáhnout ze sekce Ke stažení. Balíček také obsahuje ukázkovou konzolovou aplikaci připravenou ke spuštění.

Vytvářejte soubory Excel (XLS/XLSX) pomocí C++

Nejprve vytvořte jednoduchý sešit Excel XLSX od začátku. Sešit se skládá z jednoho nebo více listů a každý list obsahuje data ve formě řádků a sloupců. Proto, abyste mohli vytvořit excelovou tabulku, musíte nejprve vytvořit sešit a poté do něj přidat listy. Následují kroky k vytvoření souboru Excel pomocí Aspose.Cells for C++.

Následující ukázka kódu ukazuje, jak vytvořit soubor Excel XLSX pomocí 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")));

Excelový sešit

Následuje snímek obrazovky sešitu aplikace Excel, který jsme právě vytvořili.

Vytvořte Excel XLSX v C++

Přidejte data do listu aplikace Excel pomocí C++

V předchozím příkladu jsme viděli, jak vytvořit jednoduchý soubor Excel a vložit hodnotu do konkrétní buňky pomocí indexu řádků a sloupců. Nejčastěji jsou však buňky v excelových listech identifikovány pomocí písmene sloupce a čísel řádků, jako je A1, A2, B1 atd. Podívejme se tedy na příklad, jak vložit data do listu pomocí názvů buněk. Proces se liší pouze přidáním hodnoty do buňky a všechny ostatní kroky vytváření sešitu Excel a listů jsou stejné.

Následující ukázka kódu ukazuje, jak vytvořit sešit Excel XLSX a vložit do něj data pomocí C++.

//Cesta výstupního excelového souboru
StringPtr outputData = resultPath->StringAppend(new String("outputData.xlsx"));

//Přečtěte si vstupní soubor Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

//Přístup k druhému listu v souboru Excel
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

//Přidání hodnoty řetězce do buňky
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue("Hello World");

//Přidání dvojité hodnoty do buňky
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(20.5);

//Přidání celočíselné hodnoty do buňky
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(15);

//Přidání booleovské hodnoty do buňky
worksheet->GetICells()->GetObjectByIndex(new String("A4"))->PutValue(true);

//Nastavení formátu zobrazení data
intrusive_ptr<ICell> cell = worksheet->GetICells()->GetObjectByIndex(new String("A5"));
intrusive_ptr<IStyle> style = cell->GetIStyle();
style->SetNumber(15);
cell->SetIStyle(style);

//Uložte sešit
workbook->Save(outputData);

Vypočítat vzorce sešitu pomocí C++

Nastavení vzorců v sešitech aplikace Excel je úžasná funkce pro provádění výpočtů s daty. To docela usnadňuje provádět složité výpočty na datech efektivně a efektivně. Následují kroky k nastavení a výpočtu vzorců v listech aplikace Excel.

Následující ukázka kódu ukazuje, jak přidat a vypočítat vzorce v sešitu Excel XLSX pomocí C++.

//Vytvořte nový sešit
intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();

//Získejte první pracovní list, který je vytvořen ve výchozím nastavení
intrusive_ptr<IWorksheet> ws = wb->GetIWorksheets()->GetObjectByIndex(0);

//Přidání hodnoty do buňky "A1".
intrusive_ptr<ICell> cell = ws->GetICells()->GetObjectByIndex(new String("A1"));
cell->PutValue(5);

//Přidání hodnoty do buňky "A2".
cell = ws->GetICells()->GetObjectByIndex(new String("A2"));
cell->PutValue(15);

//Přidání hodnoty do buňky "A3".
cell = ws->GetICells()->GetObjectByIndex(new String("A3"));
cell->PutValue(25);

//Přidání vzorce SUM do buňky "A4".
cell = ws->GetICells()->GetObjectByIndex(new String("A4"));
cell->SetFormula(new String("=SUM(A1:A3)"));

//Výpočet výsledků vzorců
wb->CalculateFormula();

//Získejte vypočítanou hodnotu buňky "A4" a vytiskněte ji na konzole
cell = ws->GetICells()->GetObjectByIndex(new String("A4"));
StringPtr sCalcuInfo = new String(L"Calculated Value of Cell A4: ");
Console::WriteLine(sCalcuInfo->StringAppend(cell->GetStringValue()));

Vytvářejte tabulky v excelovém listu pomocí C++

Tabulky v listech aplikace Excel se používají k uspořádání skupiny dat umístěných v rozsahu buněk. Tabulky vám také pomáhají udržovat různé typy seznamů v listech. Následují kroky k vytvoření tabulky v listu aplikace Excel.

Následující ukázka kódu ukazuje, jak vytvořit tabulku v souboru Excel XLSX pomocí C++.

// Vytvořte instanci objektu sešitu
intrusive_ptr<IWorkbook>  workbook = Factory::CreateIWorkbook();

// Získání odkazu na výchozí (první) list
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Získání kolekce buněk listu
intrusive_ptr<ICells> cells = worksheet->GetICells();

// Nastavení hodnoty do buněk
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);  


// Přidání nového objektu seznamu do listu
worksheet->GetIListObjects()->Add(new String("A1"), new String("F6"), true);
intrusive_ptr<IListObject> listObject = worksheet->GetIListObjects()->GetObjectByIndex(0);

// Přidání výchozího stylu do tabulky
listObject->SetTableStyleType(TableStyleType_TableStyleMedium10);

// Zobrazit celkem
listObject->SetShowTotals(true);

// Uložení souboru Excel
workbook->Save(resultPath->StringAppend(new String("Excel_Table.xlsx")));

Excelový sešit s tabulkou

Vytvořte tabulku v Excelu v C++

Vytvářejte grafy v tabulkovém procesoru Excel pomocí C++

Grafy v tabulkách aplikace Excel se používají k vizualizaci dat pomocí různých typů grafických objektů. Poskytují nám rychlý přehled a porozumění datům, zejména když jsou data obrovská. Aspose.Cells for C++ podporuje různé grafy včetně Sunburst, Treemap, Histogram, Pyramid, Bubble, Line a mnoha dalších. Následují kroky k vytvoření grafu v sešitu aplikace Excel pomocí Aspose.Cells for C++.

Následující ukázka kódu ukazuje, jak vytvořit graf v souboru Excel XLSX pomocí C++.

// Cesta výstupního excelového souboru
StringPtr outputChartTypePyramid = resultPath->StringAppend(new String("Exce_Pyramid_Chart.xlsx"));

// Vytvořte nový sešit
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Získejte první pracovní list, který je vytvořen ve výchozím nastavení
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Přidání vzorových hodnot do buněk
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);

// Přidání grafu do listu
int chartIndex = worksheet->GetICharts()->Add(Aspose::Cells::Charts::ChartType::ChartType_Pyramid, 5, 0, 20, 8);

// Přístup k instanci nově přidaného grafu
intrusive_ptr<Aspose::Cells::Charts::IChart> chart = worksheet->GetICharts()->GetObjectByIndex(chartIndex);

// Přidání SeriesCollection (zdroj dat grafu) do grafu v rozsahu od buňky "A1" po "B3"
chart->GetNISeries()->Add(new String("A1:B3"), true);

// Uložení souboru Excel
workbook->Save(outputChartTypePyramid);

Excel sešit s grafem

Vytvořte graf v Excelu v C++

Závěr

V tomto článku jsme se zabývali tím, jak vytvořit tabulky MS Excel od začátku pomocí C++. Článek také obsahuje pokyny krok za krokem a ukázky kódu, jak vytvářet tabulky, grafy a vypočítat vzorce v listech aplikace Excel. Více o dalších pokročilých funkcích souvisejících s automatizací Excelu se můžete dozvědět v dokumentaci Aspose.Cells for C++.

Související článek