小工具知识网

当前位置: 首页 > 行业知识 > Qt篇——QTableWidget保存表格数据到Excel文件中,读Excel内容到QTableWidget

行业知识

Qt篇——QTableWidget保存表格数据到Excel文件中,读Excel内容到QTableWidget

2026-10-31 03:46:57 来源:互联网转载

表���和excel例子如下图所示: 

一、QTableWidget保存表格数据到Excel文件中

代码如下:

(pro文件中添加QT += axcontainer)

#include void MainWindow::saveTableToExcel() {    QDateTime current_date_time =QDateTime::currentDateTime();    QString excelName = "data_" + current_date_time.toString("yyyy-MM-dd_hh-mm-ss");    QString filePath = QFileDialog::getSaveFileName(this, "Save Data", excelName, "Microsoft Excel 2013(*.xlsx)");    int row = ui->originDataTable->rowCount();    int col = ui->originDataTable->columnCount();    QAxObject* excel = new QAxObject(this);    //excel->setControl("ket.Application");//wps    excel->setControl("Excel.Application"); //Excel    excel->dynamicCall("SetVisible(bool Visible)", false);    excel->setProperty("DisplayAlerts", false);    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);    for (int i = 0; i querySubObject("Cells(int,int)", i + 1, j + 1);            Range->dynamicCall("SetValue(const QString &)", ui->originDataTable->item(i, j)->text());        }    }    workbook->dynamicCall("SaveAs(const QString &)", QDir::toNativeSeparators(filePath));    if (excel != NULL) {        excel->dynamicCall("Quit()");        delete excel;        excel = NULL;    }    QMessageBox::information(this, QStringLiteral("提示"), "保存成功");}

二、读Excel文件内容到QTableWidget表格中

#include void MainWindow::saveTableToExcel() {    QString strFile = QFileDialog::getOpenFileName(this,QStringLiteral("选择Excel文件"),"","Exel file(*.xls *.xlsx)");    if (strFile.isEmpty()){        return;    }    QAxObject excel("Excel.Application");    excel.setProperty("Visible", false);    QAxObject *work_books = excel.querySubObject("WorkBooks");    //打开指定文件    work_books->dynamicCall("Open (const QString&)", strFile);    QAxObject *work_book = excel.querySubObject("ActiveWorkBook");    QString ExcelName;    static int row_count = 0, column_count = 0;    QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1);    QAxObject *used_range = work_sheet->querySubObject("UsedRange");    QAxObject *rows = used_range->querySubObject("Rows");    row_count = rows->property("Count").toInt();    QAxObject *column = used_range->querySubObject("Columns");    column_count = column->property("Count").toInt();    //这里先清空QTableWidget表格数据    ui->originDataTable->clearContents();    ui->setRowCount(0);    for (int i = 1; i dynamicCall("Value2()").toString();            dataList originDataTable->rowCount();        ui->originDataTable->insertRow(row);        for (int col = 0; col originDataTable->setItem(row, col, pItem);        }    }    work_book->dynamicCall("Close(Boolean)", false);  //关闭文件    excel.dynamicCall("Quit(void)");  //退出}

总结:

QAxObject读取excel较为方便,不必使用第三方库;缺点是读取excel文件时非常慢,一个内容很少的excel文件读取都需要几秒钟。 用第三方库读取效率会高一些,我用的是xlsx的库,需要的可以在评论区留下自己的邮箱,我将在有空时回复并发到邮箱。

上一篇:虚拟主机怎么设置cdn?

下一篇:学校网站怎么设置服务器?