使用Qxlsx导出Excel时,如何在同一单元格写入多组数据?
Qxlsx合并日/月/年数据到同一Excel单元格的解决方案
要将分离的日、月、年数据合并写入同一单元格,无需在遍历列的j循环里逐一处理,直接在每一行的循环中提取三组数据,合并成字符串后写入目标单元格即可。
修改后的代码示例
for (int i = 0; i < maxRowCount; ++i) // 遍历每一行数据 { Format format; format.setNumberFormatIndex(2); // 设置数字格式 // 写入温度数据到第k行第3列 if (i < dataColums[0].count()) { xlsx.write(k, 3, dataColums[0][i], format); } // 写入湿度数据到第k行第4列 if (i < dataColums[1].count()) { xlsx.write(k, 4, dataColums[1][i], format); } // 合并日、月、年并写入同一单元格 if (i < dataColums[2].count() && i < dataColums[3].count() && i < dataColums[4].count()) { // 提取日、月、年数据(索引对应:j=2=日,j=3=月,j=4=年) QString day = dataColums[2][i].toString(); QString month = dataColums[3][i].toString(); QString year = dataColums[4][i].toString(); // 自定义日期格式,比如 "YYYY-MM-DD" 或 "DD/MM/YYYY",按需调整 QString combinedDate = QString("%1-%2-%3").arg(year).arg(month).arg(day); // 写入到目标单元格,示例为第k行第5列,可根据需求修改列号 xlsx.write(k, 5, combinedDate); } k++; // 行号自增 }
关键说明
- 跨列数据提取:直接通过
dataColums[2][i]、dataColums[3][i]、dataColums[4][i]获取当前行的日、月、年数据,无需依赖j循环的遍历逻辑。 - 日期格式自定义:使用
QString::arg()拼接成你需要的日期格式,比如"DD/MM/YYYY"或者"年-月-日",完全根据业务需求调整。 - 越界判断:添加条件确保当前行
i同时在日、月、年三列的有效数据范围内,避免访问不存在的索引导致错误。
如果要保留原有的j循环逻辑,也可以在j==2的分支里直接提取另外两组数据:
else if(j==2) { if (i < dataColums[3].count() && i < dataColums[4].count()) { QString day = dataColums[2][i].toString(); QString month = dataColums[3][i].toString(); QString year = dataColums[4][i].toString(); QString dateStr = QString("%1/%2/%3").arg(day).arg(month).arg(year); xlsx.write(k, 5, dateStr); // 写入目标单元格 } }
内容的提问来源于stack exchange,提问作者ysncck
相关产品推荐
相关产品推荐

