欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt 将TableWidget表格数据保存到Excle的方法

程序员文章站 2024-03-17 19:51:46
...

在我刚接触这一块时,下面这篇博文给了我很大帮助,在此表示感谢。

参考博文:https://blog.csdn.net/LJianDong/article/details/84565194

添加这两个头文件

#include <QDesktopServices> 
#include <QUrl>       

下面是实现

void MainWindow::on_saveDataBtn_clicked()
{
    QString fileName = QFileDialog::getSaveFileName(this,tr("Excle file"),QString("./test.xls"),tr("Excel Files(*.xls)"));    //设置保存的文件名
    if(fileName != NULL)
    {
        QAxObject *excel = new QAxObject;
        if(excel->setControl("Excel.Application"))
        {
            excel->dynamicCall("SetVisible (bool Visible)",false);
            excel->setProperty("DisplayAlerts",false);
            QAxObject *workbooks = excel->querySubObject("WorkBooks");            //获取工作簿集合
            workbooks->dynamicCall("Add");                                        //新建一个工作簿
            QAxObject *workbook = excel->querySubObject("ActiveWorkBook");        //获取当前工作簿
            QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);
            QAxObject *cell;

            /*添加Excel表头数据*/
            for(int i = 1; i <= ui->tableWidget->columnCount(); i++)
            {
                cell = worksheet->querySubObject("Cells(int,int)", 1, i);
                cell->setProperty("RowHeight", 40);
                cell->dynamicCall("SetValue(const QString&)", ui->tableWidget->horizontalHeaderItem(i-1)->data(0).toString());
            }
            /*将form列表中的数据依此保存到Excel文件中*/
            for(int j = 2; j <= ui->tableWidget->rowCount()+1;j++)
            {
                for(int k = 1;k <= ui->tableWidget->columnCount();k++)
                {
                    cell = worksheet->querySubObject("Cells(int,int)", j, k);
                    cell->dynamicCall("SetValue(const QString&)",ui->tableWidget->item(j-2,k-1)->text()+ "\t");
                }
            }
            /*将生成的Excel文件保存到指定目录下*/
            workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(fileName)); //保存至fileName
            workbook->dynamicCall("Close()");                                                   //关闭工作簿
            excel->dynamicCall("Quit()");                                                       //关闭excel
            delete excel;
            excel = NULL;

            if (QMessageBox::question(NULL,QString::fromUtf8("完成"),QString::fromUtf8("文件已经导出,是否现在打开?"),QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes)
            {
                QDesktopServices::openUrl(QUrl("file:///" + QDir::toNativeSeparators(fileName)));
            }
        }
    }
}
相关标签: Qt qt excel