#include #include #include std::vector < std::pair> writeExcelLoop(XLWorksheet& sheet, customExcelStruct& input, int depth, int cols) { std::vector < std::pair> mergeStr; std::string startUnit = char(65 + depth) + std::to_string(cols); int depthCount = 0; for (int i = 0; i < input.nexCols.size(); i++) { std::vector < std::pair> sonMerges = writeExcelLoop(sheet, input.nexCols[i], depth + 1, cols + depthCount); mergeStr.insert(mergeStr.end(), sonMerges.begin(), sonMerges.end()); depthCount += getMax((int)input.nexCols[i].nexCols.size(), 1); } std::string endUnit = char(65 + depth) + std::to_string(cols + getMax(depthCount - 1, 0)); sheet.cell(startUnit).value() = input.text; mergeStr.push_back(std::make_pair(startUnit, endUnit)); return mergeStr; } void writeExcel(std::string path, std::string sheetName, std::vector titles, customExcelStruct input) { std::vector> mergeStr(0); try { fileManager::setFileReadOnly(path, false); XLDocument doc; if (std::filesystem::exists(path) == true) doc.open(path); else doc.create(path); if (doc.workbook().worksheetExists(sheetName) == false) doc.workbook().addWorksheet(sheetName); auto sheet = doc.workbook().worksheet(sheetName); int lastrow = sheet.rowCount(); if (lastrow == 0) { auto sheet = doc.workbook().worksheet(sheetName); for (int i = 0; i < titles.size(); i++) { std::string unit = char(65 + i) + std::string("1"); sheet.cell(unit).value() = titles[i]; } } lastrow = sheet.rowCount(); mergeStr = writeExcelLoop(sheet, input, 0, lastrow + 1); doc.save(); doc.close(); } catch (const std::exception& e) { std::cerr << "An error occurred: " << e.what() << std::endl; fileManager::setFileReadOnly(path, true); } /*for (auto &str : mergeStr) if(str.second.compare("")) _core._pythonCpp.runPythonScript("./pyScript/mergeExcelCells.py", { path,sheetName, str.first, str.second });*/ fileManager::setFileReadOnly(path, true); }