手机网站建设的企业,企业展厅设计公司哪个好看,专业网页美工招聘,看网站有没有做404这是我记录Qt学习过程的第7篇心得文章#xff0c;上次写到使用QAxObject将QTableView数据导出到Excel表格#xff0c;使用过程中发现#xff0c;执行效率不高#xff0c;而且当电脑同时安装Office和WPS时#xff0c;还经常出错#xff0c;于是就研究了QXlsx#xff0c;发…这是我记录Qt学习过程的第7篇心得文章上次写到使用QAxObject将QTableView数据导出到Excel表格使用过程中发现执行效率不高而且当电脑同时安装Office和WPS时还经常出错于是就研究了QXlsx发现利用QXlsx处理Excel真的太方便了啥也不说上代码。
实现代码
//将QTableView数据写入EXcel使用QXlsx
bool Skysonya::writeTableviewToExcelByQXlsx(const QString fileName, QString tableName, QTableView *tableView,QString strTitle)
{QAbstractTableModel *model qobject_castQAbstractTableModel *(tableView-model());int rowCount model-rowCount();int colCount model-columnCount();QXlsx::Document xlsx;xlsx.addSheet(tableName);int colW[200] {};// 写入表头并设置字体QXlsx::Format headerFormat;headerFormat.setFontName(黑体); //设置字体headerFormat.setFontSize(12); //设置字号headerFormat.setHorizontalAlignment(QXlsx::Format::AlignHCenter); //设置单元格居中headerFormat.setBorderStyle(QXlsx::Format::BorderThin); //设置单元格边线// 写入表头for (int col 0; col colCount 1; col){QString cell;if (col 0)cell 序号; //增加序号列elsecell model-headerData(col - 1, Qt::Horizontal).toString();xlsx.write(1, col 1, cell, headerFormat);// 设置列宽int columnWidth cell.toLocal8Bit().length() 2; //计算字符串长度中文字符占位2if (columnWidth colW[col]){colW[col] columnWidth;xlsx.setColumnWidth(col 1, columnWidth); // 设置每列宽度为字符数2}}// qDebug() 1: ArrayToString(colW, colCount) Qt::endl;qDebug() strTitle 数据表头写入成功 Qt::endl;QXlsx::Format itemFormat;itemFormat.setHorizontalAlignment(QXlsx::Format::AlignHCenter);itemFormat.setBorderStyle(QXlsx::Format::BorderThin);// 写入数据for (int row 0; row rowCount; row){for (int col 0; col colCount 1; col){QString cell;if (col 0)cell QString::number(row 1);elsecell model-data(model-index(row, col - 1)).toString();xlsx.write(row 2, col 1, cell, itemFormat);// 设置列宽int columnWidth cell.toLocal8Bit().length() 2; //计算字符串长度中文字符占位2if (columnWidth colW[col]){colW[col] columnWidth;xlsx.setColumnWidth(col 1, columnWidth); // 设置每列宽度为字符数2}}// qDebug() QString::number(row 2) : ArrayToString(colW, colCount) Qt::endl;}qDebug() strTitle 数据表数据写入成功 Qt::endl;// 保存文件if (!xlsx.saveAs(fileName)){messageBox(warning, strTitle, 保存Excel文件失败);return false;}qDebug() strTitle 保存Excel文件成功 Qt::endl;xlsx.deleteLater();return true;
}
messageBox()函数参考拙文QT实现QMessageBox中文按钮
QXlsx下载与配置查阅QXlsx Qt操作excel作者周不易在此也表示感谢