QXlsx对合并单元格的处理

编程入门 行业动态 更新时间:2024-10-21 15:50:28

QXlsx对合并<a href=https://www.elefans.com/category/jswz/34/1770080.html style=单元格的处理"/>

QXlsx对合并单元格的处理

以下代码是在项目中使用QXlsx对合并单元格的处理,处理的部分都加了注释

void c_excel::ImportIPCNameInfo(modipcmrg *qWidget,QStandardItemModel *qModelList,QString qstrFilePath){QXlsx::Document xlsx(qstrFilePath);QXlsx::CellRange range = xlsx.dimension();int nrow = range.lastRow();int ncol = range.lastColumn();int nRowCout = qModelList->rowCount();/******合并单元格的内容处理******/QXlsx::Workbook *xWorkBook = xlsx.workbook();//默认使用第一张表格QXlsx::Worksheet *xWorkSheet = static_cast<QXlsx::Worksheet *>(xWorkBook->sheet(0));//获取到所有的合并单元格QList<QXlsx::CellRange> qMergedCellsList = xWorkSheet->mergedCells();QMap<QString,QVariant> qmap;for(int i = 0; i < nRowCout; i++){TAG_DEVICE_CHANNEL_IPC_24_INFO& ipcInfo = qModelList->item(i)->data().value<TAG_DEVICE_CHANNEL_IPC_24_INFO>();QString ipcName = ipcInfo.qstrDeviceName;QString ipcIp = ipcInfo.qstrIP;unsigned int ipcProtocol = ipcInfo.nProtocolType;auto &iter = qmap.find(ipcIp);if(iter == qmap.end()){qmap.insert(ipcIp,QVariant::fromValue(ipcInfo));}}for(int j = 1;j <= nrow;j++){QString qstrIp = "";QString qstrName = "";for(int k=1; k<=ncol; k++){if(k == 1){qstrIp = xlsx.read(j,k).value<QString>();}else{if(qMergedCellsList.size() > 0){bool bflag = false;//合并单元格的内容处理foreach(QXlsx::CellRange cellR, qMergedCellsList){//合并单元格可通过第一行,最后一行,第一列,最后一列四个参数来确定合并的区域int nFirstRow = cellR.firstRow();int nLastRow = cellR.lastRow();int nFirstCol = cellR.firstColumn();int nLastCol = cellR.lastColumn();//判断该单元格是否处于合并单元格中if(nFirstRow <= j && j<= nLastRow && nFirstCol <= k && k<= nLastCol){qstrName += xlsx.read(nFirstRow,nFirstCol).value<QString>();bflag = true;}}if(bflag){continue;}}qstrName += xlsx.read(j,k).value<QString>();}}auto &iter = qmap.find(qstrIp);if(iter == qmap.end()){continue;}QVariant qvar = iter.value();TAG_DEVICE_CHANNEL_IPC_24_INFO ipcInfo = qvar.value<TAG_DEVICE_CHANNEL_IPC_24_INFO>();if(ipcInfo.qstrIP == qstrIp && !qstrName.isEmpty() && !qstrName.isNull() && qstrName != ipcInfo.qstrDeviceName){if(ipcInfo.nProtocolType == UNS_DEVICE_NVRODLPRO){ipcInfo.qstrDeviceName = QString::number(ipcInfo.nChannel) + QString("_")+qstrName;}else{ipcInfo.qstrDeviceName = qstrName;}QVariant tag = QVariant::fromValue<TAG_DEVICE_CHANNEL_IPC_24_INFO>(ipcInfo);emit qWidget->mod_channel_info_import_export_signal(qWidget->GetProtocolType(),qWidget->GetDeviceID(),QVariant::fromValue(tag));}}Sleep(500);emit import_IPC_name_success_signal();

下面是我的表格格式,第一列之后可以随便合并

更多推荐

QXlsx对合并单元格的处理

本文发布于:2024-02-27 05:03:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1705278.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:单元格   QXlsx

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!