版权声明:本文为博主原创文章,转载请联系1006325356@qq.com。 https://blog.csdn.net/iamqianrenzhan/article/details/90522385
最近有一个把检测结果导出到excel中的任务,由于对qt比较熟悉,所以打算使用qt来实现。查了一下,使用qt下自带的QAxObject类,实现还是比较简单的。
首先需要在pro文件中添加axcontainer
QT += core gui axcontainer 然后添加包含文件
#include <QAxObject> 如下是代码的具体实现:
void MainWindow::exportexcel(VRecord vrecord) { QAxObject *excel = NULL; QAxObject *workbooks = NULL; QAxObject *workbook = NULL; excel = new QAxObject("Excel.Application"); excel->dynamicCall("SetVisible(bool)", true); workbooks = excel->querySubObject("WorkBooks"); workbook = workbooks->querySubObject("Open(QString&)", "D:/build-QT_EXPORT-Desktop_Qt_5_9_0_MSVC2015_32bit-Debug/template.xls"); QAxObject * worksheets = workbook->querySubObject("WorkSheets"); //int iWorkSheet = worksheets->property("Count").toInt(); //qDebug() << QString::fromLocal8Bit("Excel文件中表的个数: %1").arg(QString::number(iWorkSheet)); QAxObject * worksheet = worksheets->querySubObject("Item(int)", 1); /* 表格范围和行数列数 QAxObject * usedrange = worksheet->querySubObject("UsedRange"); QAxObject * rows = usedrange->querySubObject("Rows"); int iRows = rows->property("Count").toInt(); qDebug() << QString::fromLocal8Bit("行数为: %1").arg(QString::number(iRows)); QAxObject * columns = usedrange->querySubObject("Columns"); int iColumns = columns->property("Count").toInt(); qDebug() << QString::fromLocal8Bit("列数为: %1").arg(QString::number(iColumns)); int iStartRow = rows->property("Row").toInt(); qDebug() << QString::fromLocal8Bit("起始行为: %1").arg(QString::number(iStartRow)); int iColumn = columns->property("Column").toInt(); qDebug() << QString::fromLocal8Bit("起始列为: %1").arg(QString::number(iColumn)); */ /* 读出数据 QAxObject *range1 = worksheet->querySubObject("Range(QString)", "F6"); QString strRow6Col6 = range1->property("Value").toString(); qDebug() << QString::fromLocal8Bit("第6行,第6列的数据为:") + strRow6Col6; */ //写入数据 //QAxObject *range2 = worksheet->querySubObject("Range(QString)", "F6"); //range2->setProperty("Value", "aaaa"); for(int i = 0;i<vrecord.size();i++) { QString cora = "A" + QString::number(i+2); QAxObject *rangea = worksheet->querySubObject("Range(QString)", cora); rangea->setProperty("Value", vrecord.at(i).id); QString corb = "B" + QString::number(i+2); QAxObject *rangeb = worksheet->querySubObject("Range(QString)", corb); rangeb->setProperty("Value", vrecord.at(i).dt.toString("yyyy/MM/dd HH:mm:ss")); QString corc = "C" + QString::number(i+2); QAxObject *rangec = worksheet->querySubObject("Range(QString)", corc); rangec->setProperty("Value", vrecord.at(i).res); } //另存为文件 QString filepath = QString::fromLocal8Bit("D:/build-QT_EXPORT-Desktop_Qt_5_9_0_MSVC2015_32bit-Debug/报表输出结果.xls"); workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath)); workbook->dynamicCall("Close()"); excel->dynamicCall("Quit()"); if (excel) { delete excel; excel = NULL; } QMessageBox::information(0 , QString::fromLocal8Bit("提示") , QString::fromLocal8Bit("报表生成成功"), QMessageBox::Ok | QMessageBox::Default , 0 ); } 本函数实现的功能是打开一个模板文件,把传入的记录写到指定的位置,并自动完成另存为的操作。这个程序在跑的过程中会打开excel。使用这种方法有一个缺点,那就是系统必须按照微软的excel,wps不行。
文章来源: https://blog.csdn.net/iamqianrenzhan/article/details/90522385