Loading... # 一.第三方库安装及头文件引用 `vcpkg install tingxml2` `vcpkg install xlnt` ```c++ #include <tinyxml2.h> #include <xlnt/xlnt.hpp> ``` # 二.xml文件解析 ```c++ try { //获取文件名 CString fileName; GetDlgItem(IDC_EDIT_FileFullPath)->GetWindowText(fileName); if (fileName.GetLength() <= 0) { MessageBox("请选择文件后再试!", "提示", MB_OK | MB_ICONWARNING); return; } tinyxml2::XMLDocument m_XmlDoc; m_XmlDoc.LoadFile(fileName); //获取第一个元素 XMLElement* xmlElement = m_XmlDoc.FirstChildElement("Grids")->FirstChildElement("Main"); int iCount = 0; //CString txt = "MainName\tGridName\tgridChildName\tbank\tid\tlen\ttype\top\tdefault\tname\tdescription"; while (xmlElement) { //解析节点属性 auto MainName = xmlElement->Attribute("name"); //获取第一个子元素 auto xmlElement_1 = xmlElement->FirstChildElement(); while (xmlElement_1) { //解析节点属性 auto GridName = xmlElement_1->Attribute("name"); //获取第一个子元素 auto xmlNodeRow = xmlElement_1->FirstChildElement(); while (xmlNodeRow) { //判断节点是否包含属性属性 if (xmlNodeRow->FindAttribute("bank")) { //解析节点属性 auto bank = xmlNodeRow->Attribute("bank"); auto id = xmlNodeRow->Attribute("id"); auto len = xmlNodeRow->Attribute("len"); auto type = xmlNodeRow->Attribute("type"); auto op = xmlNodeRow->Attribute("op"); auto defaul = xmlNodeRow->Attribute("default"); auto name = xmlNodeRow->Attribute("name"); auto description = xmlNodeRow->Attribute("description"); iCount++; } else { //获取第一个子元素 auto gridChildXmlEle = xmlNodeRow->FirstChildElement(); if (gridChildXmlEle) { auto gridChildName = xmlNodeRow->Attribute("name"); while (gridChildXmlEle) { if (gridChildXmlEle->FindAttribute("Item")) continue; //解析节点属性 auto bank = gridChildXmlEle->Attribute("bank"); auto id = gridChildXmlEle->Attribute("id"); auto len = gridChildXmlEle->Attribute("len"); auto type = gridChildXmlEle->Attribute("type"); auto op = gridChildXmlEle->Attribute("op"); auto defaul = gridChildXmlEle->Attribute("default"); auto name = gridChildXmlEle->Attribute("name"); auto description = gridChildXmlEle->Attribute("description"); iCount++; //迭代 gridChildXmlEle = gridChildXmlEle->NextSiblingElement(); } } } xmlNodeRow = xmlNodeRow->NextSiblingElement(); } xmlElement_1 = xmlElement_1->NextSiblingElement(); } xmlElement = xmlElement->NextSiblingElement(); } } catch (...) { MessageBox("转换出错!", "提示", MB_OK | MB_ICONWARNING); } ``` # 三.Excel文件生成 ```c++ try { xlnt::workbook wb; //激活sheet xlnt::worksheet ws = wb.active_sheet(); //设置单元格值 //也可采用ws.cell(列号, 行号).value(val)的方式 ws.cell("A1").value("MainName"); ws.cell("B1").value("GridName"); ws.cell("C1").value("gridChildName"); ws.cell("D1").value("bank"); ws.cell("E1").value("id"); ws.cell("F1").value("len"); ws.cell("G1").value("type"); ws.cell("H1").value("op"); ws.cell("I1").value("default"); ws.cell("J1").value("name"); ws.cell("K1").value("description"); CTime tm = CTime::GetCurrentTime(); CString tmpName = "Param_" + tm.Format("%Y%m%d-%H%M%S") + ".xlsx"; //设置保存文件目录 CFileDialog saveFileDlg(FALSE, NULL, tmpName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("xlsx|*.xlsx"), NULL); if (saveFileDlg.DoModal() == IDOK) { //保存excel文件 wb.save(saveFileDlg.GetPathName().GetString()); } } catch (...) { MessageBox("出错!", "提示", MB_OK | MB_ICONWARNING); } ``` 最后修改:2022 年 05 月 04 日 10 : 41 PM © 允许规范转载