#include "xlsxhandler.h" #include "logger.h" void XlsxHandler::test() { QString sourceFilePath = QDir::currentPath() + "/sample.xlsx"; qDebug() << "fileName:" << sourceFilePath; readFile(sourceFilePath); } void XlsxHandler::readFile(const QString sourceFilePath) { // 检查文件是否存在 if(!QFile::exists(sourceFilePath)) { qDebug() << "文件不存在:" << sourceFilePath; return; } // 尝试打开文件 QXlsx::Document xlsx(sourceFilePath); #if 0 // 获取所有工作表名称 QStringList sheetNames = xlsx.sheetNames(); qDebug() << "工作表名称:" << sheetNames; #endif QXlsx::Worksheet *workSheet = xlsx.currentWorksheet(); if(!workSheet) { qDebug() << "当前工作表为空。"; return; } // 获取工作表的行数和列数 int rowCount = workSheet->dimension().rowCount(); int colCount = workSheet->dimension().columnCount(); qDebug() << "row:" << rowCount << "col:" << colCount; logde << "0:" << workSheet->cellAt(1, 1)->value().toString().toStdString(); qDebug() << workSheet->cellAt(1, 1)->value().toString(); int index = 2; Global::ExperimentInfo ei; ei.sampleName = workSheet->cellAt(index++, 2)->value().toString(); logde << "sample name:" << ei.sampleName.toStdString(); // return; ei.sampleWeight = workSheet->cellAt(index++, 2)->value().toString(); ei.date = workSheet->cellAt(index++, 2)->value().toString(); ei.operatorName = workSheet->cellAt(index++, 2)->value().toString(); ei.phaseSize = workSheet->cellAt(index++, 2)->value().toInt(); QVector phaseTotalVtr; int startLineIndex = 9; for(int i = 0; i < ei.phaseSize; i++) { Global::PhaseTotalInfo phaseTotal; phaseTotal.phaseIndex = i + 1; readPhaseData(workSheet, startLineIndex, phaseTotal); phaseTotalVtr.push_back(phaseTotal); } } void XlsxHandler::readPhaseData(QXlsx::Worksheet *workSheet, int &startLineIndex, Global::PhaseTotalInfo &phaseTotal) { // int startLineIndex = 9; startLineIndex++; startLineIndex++; phaseTotal.phase.cutoff_temp = workSheet->cellAt(startLineIndex++, 2)->value().toFloat(); phaseTotal.phase.temp_flow = workSheet->cellAt(startLineIndex++, 2)->value().toFloat(); phaseTotal.phase.constant_temp_time_min = (uint16_t)(workSheet->cellAt(startLineIndex++, 2)->value().toInt()); phaseTotal.phase.gas = static_cast(workSheet->cellAt(startLineIndex++, 2)->value().toInt()); int dataSize = workSheet->cellAt(startLineIndex++, 2)->value().toInt(); for(int i = 0; i < dataSize; i++) { Global::ExperimentData data; data.runTime = workSheet->cellAt(startLineIndex++, 2)->value().toFloat(); data.sampleTemp = workSheet->cellAt(startLineIndex++, 3)->value().toFloat(); data.dsc = workSheet->cellAt(startLineIndex++, 4)->value().toFloat(); phaseTotal.dataVtr.push_back(data); } } void XlsxHandler::writeFile() { QXlsx::Document xlsx; xlsx.addSheet("Sheet1"); // 添加一个新的工作表 #if 0 // 创建一个新的 Excel 文档 QXlsx::Document xlsx; // 检查数据是否为空 if (data.isEmpty()) { qWarning() << "没有数据可写入"; return ; } // 遍历数据并写入单元格 for (int row = 0; row < data.size(); ++row) { const QVector& rowData = data[row]; for (int col = 0; col < rowData.size(); ++col) { QString cellValue = rowData[col]; xlsx.write(row + 1, col + 1, cellValue); // 行和列从1开始 } } // 保存文件 if (!xlsx.saveAs(filePath)) { qWarning() << "无法保存文件:" << filePath; return ; } qDebug() << "文件保存成功:" << filePath; return ; #endif }