mirror of
https://github.com/troldal/OpenXLSX.git
synced 2025-05-09 18:31:28 +08:00
90 lines
4.2 KiB
C++
90 lines
4.2 KiB
C++
#include <OpenXLSX.hpp>
|
|
#include <iostream>
|
|
|
|
using namespace std;
|
|
using namespace OpenXLSX;
|
|
|
|
void printWorkbook(const XLWorkbook& wb) {
|
|
cout << "\nSheets in workbook:\n";
|
|
for (const auto& name : wb.worksheetNames()) cout << wb.indexOfSheet(name) << " : " << name << "\n";
|
|
}
|
|
|
|
int main()
|
|
{
|
|
cout << "********************************************************************************\n";
|
|
cout << "DEMO PROGRAM #03: Sheet Handling\n";
|
|
cout << "********************************************************************************\n";
|
|
|
|
// OpenXLSX can be used to create and delete sheets in a workbook, as well as re-ordering of sheets.
|
|
// This example illustrates how this can be done. Please note that at the moment, chartsheets can only
|
|
// be renamed and deleted, not created or manipulated.
|
|
|
|
// First, create a new document and store the workbook object in a variable. Print the sheet names.
|
|
XLDocument doc;
|
|
doc.create("./Demo03.xlsx", XLForceOverwrite);
|
|
auto wbk = doc.workbook();
|
|
printWorkbook(wbk);
|
|
|
|
// Add two new worksheets. The 'addWorksheet' method takes the name of the new sheet as an argument,
|
|
// and appends the new workdheet at the end.
|
|
// Only worksheets can be added; there is no 'addChartsheet' method.
|
|
wbk.addWorksheet("Sheet2");
|
|
wbk.addWorksheet("Sheet3");
|
|
printWorkbook(wbk);
|
|
|
|
cout << "Sheet1 active: " << (wbk.worksheet("Sheet1").isActive() ? "true" : "false") << endl;
|
|
cout << "Sheet2 active: " << (wbk.worksheet("Sheet2").isActive() ? "true" : "false") << endl;
|
|
cout << "Sheet3 active: " << (wbk.worksheet("Sheet3").isActive() ? "true" : "false") << endl;
|
|
|
|
wbk.worksheet("Sheet3").setActive();
|
|
|
|
cout << "Sheet1 active: " << (wbk.worksheet("Sheet1").isActive() ? "true" : "false") << endl;
|
|
cout << "Sheet2 active: " << (wbk.worksheet("Sheet2").isActive() ? "true" : "false") << endl;
|
|
cout << "Sheet3 active: " << (wbk.worksheet("Sheet3").isActive() ? "true" : "false") << endl;
|
|
|
|
// OpenXLSX provides three different classes to handle workbook sheets: XLSheet, XLWorksheet, and
|
|
// XLChartsheet. As you might have guessed, XLWorksheet and XLChartsheet represents worksheets
|
|
// and chartsheets, respectively. XLChartsheet only has a limited set of functionality.
|
|
// XLSheet, on the other hand, is basically a std::variant that can hold either an XLWorksheet,
|
|
// or an XLChartsheet object. XLSheet has a limited set of functions that are common to
|
|
// both XLWorksheet and XLChartsheet objects, such as 'clone()' or 'setIndex()'. XLSheet is
|
|
// not a parent class to either XLWorksheet or XLChartsheet, and therefore cannot be used
|
|
// polymorphically.
|
|
|
|
// From an XLSheet object you can retrieve the contained XLWorksheet or XLChartsheet object by
|
|
// using the 'get<>()' function:
|
|
auto s1 = wbk.sheet("Sheet2").get<XLWorksheet>();
|
|
|
|
// Alternatively, you can retrieve the contained object, by using implicit conversion:
|
|
XLWorksheet s2 = wbk.sheet("Sheet2");
|
|
|
|
// Existing sheets can be cloned by calling the 'clone' method on the individual sheet,
|
|
// or by calling the 'cloneSheet' method from the XLWorkbook object. If the latter is
|
|
// chosen, both the name of the sheet to be cloned, as well as the name of the new
|
|
// sheet must be provided.
|
|
// In principle, chartsheets can also be cloned, but the results may not be as expected.
|
|
wbk.sheet("Sheet1").clone("Sheet4");
|
|
wbk.cloneSheet("Sheet2", "Sheet5");
|
|
printWorkbook(wbk);
|
|
|
|
// The sheets in the workbook can be reordered by calling the 'setIndex' method on the
|
|
// individual sheets (or worksheets/chartsheets).
|
|
wbk.deleteSheet("Sheet1");
|
|
wbk.worksheet("Sheet5").setIndex(1);
|
|
wbk.worksheet("Sheet4").setIndex(2);
|
|
wbk.worksheet("Sheet3").setIndex(3);
|
|
wbk.worksheet("Sheet2").setIndex(4);
|
|
printWorkbook(wbk);
|
|
|
|
// The color of each sheet tab can be set using the 'setColor' method for a
|
|
// sheet, and passing an XLColor object as an argument.
|
|
wbk.sheet("Sheet2").setColor(XLColor(0, 0, 0));
|
|
wbk.sheet("Sheet3").setColor(XLColor(255, 0, 0));
|
|
wbk.sheet("Sheet4").setColor(XLColor(0, 255, 0));
|
|
wbk.sheet("Sheet5").setColor(XLColor(0, 0, 255));
|
|
|
|
doc.save();
|
|
|
|
return 0;
|
|
}
|