QT 调用WPS导出报表

1,015 阅读2分钟

最近在使用QT进行导出报表功能的时候发现在windows上可以使用

QAxContainer控件,但是在Linux下面这个控件有问题。在windows的代码如下:

最近在使用QT进行导出报表功能的时候发现在windows上可以使用QAxContainer控件,但是在Linux下面这个控件有问题。在windows的代码如下:bool QrCodeDialog::exportExcel(QList<test> qlist)
{    QString filepath = QFileDialog::getSaveFileName(this,tr("choose filepath"),"/",tr("XML files(*.xlsx)"));
    qDebug() << "filepath :" << filepath;
//    QString filepath = QCoreApplication::applicationDirPath();
//    filepath.append("Excel.xlsx");
    testtemp;
    if(!filepath.isEmpty()){
        QAxObject *excel = new QAxObject(this);
        excel->setControl("Excel.Application");//连接Excel控件
        excel->dynamicCall("SetVisible (bool Visible)","false");//不显示窗体
        excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
        QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合
        workbooks->dynamicCall("Add");//新建一个工作簿
        QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿
        QAxObject *worksheets = workbook->querySubObject("Sheets");//获取工作表集合
        QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);//获取工作表集合的工作表1,即sheet1
        QAxObject *cellA,*cellB,*cellC,*cellD,*cellE,*cellF;
        //设置标题
        int cellrow=1;
        QString A="A"+QString::number(cellrow);//设置要操作的单元格,如A1
        QString B="B"+QString::number(cellrow);
        QString C="C"+QString::number(cellrow);
        QString D="D"+QString::number(cellrow);
        QString E="E"+QString::number(cellrow);
        QString F="F"+QString::number(cellrow);

        //获取单元格
        cellA = worksheet->querySubObject("Range(QVariant, QVariant)",A);
        cellB = worksheet->querySubObject("Range(QVariant, QVariant)",B);
        cellC = worksheet->querySubObject("Range(QVariant, QVariant)",C);
        cellD = worksheet->querySubObject("Range(QVariant, QVariant)",D);
        cellE = worksheet->querySubObject("Range(QVariant, QVariant)",E);
        cellF = worksheet->querySubObject("Range(QVariant, QVariant)",F);


        //设置单元格的值
        cellA->dynamicCall("SetValue(const QVariant&)",QVariant(tr("name")));
        cellB->dynamicCall("SetValue(const QVariant&)",QVariant(tr("Number")));
        cellC->dynamicCall("SetValue(const QVariant&)",QVariant(tr("IP")));
        cellD->dynamicCall("SetValue(const QVariant&)",QVariant(tr("code")));
        cellE->dynamicCall("SetValue(const QVariant&)",QVariant(tr("Person")));

        cellrow++;
        int rows=qlist.size();
        for(int i=0; i<rows; i++){
            QString A="A"+QString::number(cellrow);//设置要操作的单元格,如A1
            QString B="B"+QString::number(cellrow);
            QString C="C"+QString::number(cellrow);
            QString D="D"+QString::number(cellrow);
            QString E="E"+QString::number(cellrow);

            cellA = worksheet->querySubObject("Range(QVariant, QVariant)",A);//获取单元格
            cellB = worksheet->querySubObject("Range(QVariant, QVariant)",B);
            cellC = worksheet->querySubObject("Range(QVariant, QVariant)",C);
            cellD = worksheet->querySubObject("Range(QVariant, QVariant)",D);
            cellE = worksheet->querySubObject("Range(QVariant, QVariant)",E);

            temp = qlist[i];
            cellA->dynamicCall("SetValue(const QVariant&)",QVariant(temp.Name()));//设置单元格的值
            cellB->dynamicCall("SetValue(const QVariant&)",QVariant(temp.Type()));
            cellC->dynamicCall("SetValue(const QVariant&)",QVariant(temp.Ip()));
            cellD->dynamicCall("SetValue(const QVariant&)",QVariant(temp.Code()));
            cellE->dynamicCall("SetValue(const QVariant&)",QVariant(temp.Persion()));
            cellrow++;
        }
        workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。
        workbook->dynamicCall("Close()");//关闭工作簿
        excel->dynamicCall("Quit()");//关闭excel
        delete excel;
        excel=NULL;
        return true;    }
    else {
        return false;
    }
}

这个可以在windows上可以导出表格。

然后在看看qt的帮助文档才发现出了问题。

这个是在wondows上导出没有问题的。

QT +=   axcontainer