Qt将tableWidget数据导入指定Excel中

如题,该函数调用系统API来完成与一般应用同样的保存路径选取方式,会弹出系统窗口要求选择路径并命名文件。

void MyMainWin::writeExcel(QTableWidget *tableWidget){
    QString fileName = QFileDialog::getSaveFileName(this, tr("另存为"), "/home", tr("Excel 工作簿(*.xlsx *.xls)"));
    if(fileName.isEmpty()){
        noPath();
        return;
    }
    progressBar->show();  //显示进度
    progressBar->setValue(0);  //设置进度条的值为0

    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 <= tableWidget->columnCount(); i++){
            cell=worksheet->querySubObject("Cells(int,int)", 1, i);
            cell->setProperty("RowHeight", 20);
            cell->dynamicCall("SetValue(const QString&)", tableWidget->horizontalHeaderItem(i - 1)->data(0).toString());
            if(progressBar->value() <= 50)
                progressBar->setValue(10 + i * 5);
        }

        /*将列表中的数据依此保存到Excel文件中*/
        for(int i = 2; i <= tableWidget->rowCount() + 1; i++){
            for(int j = 1; j <= tableWidget->columnCount(); j++) {
                cell=worksheet->querySubObject("Cells(int,int)", i, j);
                cell->dynamicCall("SetValue(const QString&)", tableWidget->item(i - 2, j - 1)->text() + "\t");
            }
            if(progressBar->value() <= 90)
                progressBar->setValue(50 + i * 5);
        }

        /*将生成的Excel文件保存到指定目录下*/
        workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(fileName)); //保存至fileName
        workbook->dynamicCall("Close()");                                                   //关闭工作簿
        excel->dynamicCall("Quit()");                                                       //关闭excel
        delete excel;
        excel=NULL;
        progressBar->setValue(100);
    }

    return;
}
### 回答1: 在Qt使用TableWidget导入xls数据,主要可以分为以下几个步骤: 1. 首先,需要引入QAxWidget库和QAxObject库,这两个库在Qt的安装目录下的Qt\版本\mingw\plugins\activeqt提供。可以将这两个库拷贝到工程目录下,然后在.pro文件添加对应的库引用。 2. 创建一个TableWidget控件,用来展示导入数据。可以在设计界面直接拖拽一个TableWidget控件到窗体。 3. 在代码,通过QAxObject对象打开xls文件,并将数据读取到TableWidget。具体步骤如下: - 创建一个QAxObject对象,并调用其setControl方法,将其设置为"Excel.Application",即打开Excel应用。 - 创建另一个QAxObject对象,并通过特定的接口打开xls文件,如"Workbooks.Open"。可以指定文件路径和密码等参数。 - 获取打开的Excel文件的工作簿和工作表,并通过调用QAxObject的方法来处理数据。 - 通过调用TableWidget的相关方法,将读取到的数据添加到TableWidget。 4. 最后记得关闭Excel应用,并释放相应的资源。调用QAxObject的方法来关闭xls文件和Excel应用,如"Workbook.Close"和"Quit"。 以上就是使用TableWidget导入xls数据的大致步骤。具体的实现过程,还需要根据具体的需求和xls文件的结构进行相应的处理和调整。 ### 回答2: 在Qt将xls数据导入TableWidget可以通过以下步骤实现: 1. 导入所需的库文件:在Qt代码添加包含QtExcel库文件的头文件,如`#include "QXlsx/xlsxdocument.h"`。 2. 创建TableWidget对象:在窗口类定义一个TableWidget对象,用于显示导入数据,如`QTableWidget *tableWidget = new QTableWidget(this);`。 3. 打开并读取xls文件:使用`QXlsx`库的`QXlsx::Document`类,打开要导入的xls文件,并读取其数据。例如: ```cpp QXlsx::Document xlsDocument("data.xlsx"); xlsDocument.selectSheet("Sheet1"); QXlsx::CellRange range = xlsDocument.dimension(); int rowStart = range.firstRow(); int rowCount = range.rowCount(); int columnStart = range.firstColumn(); int columnCount = range.columnCount(); ``` 4. 将数据导入TableWidget:使用循环遍历的方法将xls文件数据逐个导入TableWidget。例如: ```cpp // 设置TableWidget的行列数 tableWidget->setRowCount(rowCount); tableWidget->setColumnCount(columnCount); // 循环遍历xls数据 for (int row = rowStart; row <= rowCount; row++) { for (int column = columnStart; column <= columnCount; column++) { QXlsx::Cell *cell = xlsDocument.cellAt(row, column); QTableWidgetItem *item = new QTableWidgetItem(cell->value().toString()); tableWidget->setItem(row - rowStart, column - columnStart, item); } } ``` 5. 显示TableWidget:将TableWidget添加到窗口,并设置其大小和位置,以便在窗口显示出来。 ```cpp QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget(tableWidget); setLayout(layout); ``` 以上就是将xls数据导入QtTableWidget的方法。在使用过程,需要注意正确引入相关库文件,并根据实际情况调整代码数据读取和导入的方式。 ### 回答3: 在Qt,我们可以使用QTableWidget导入XLS数据。要实现这个功能,首先需要安装并配置QtXlsx模块。 1. 打开Qt并创建一个新的Qt项目。 2. 在.pro文件添加`QT += xlsx`以引入Xlsx模块。 3. 在主窗口类的头文件添加`#include <QTableWidgetItem>`和`#include <QXlsx/Document>`。 4. 在主窗口类的头文件添加一个私有的QTableWidget成员变量,例如`QTableWidget *tableWidget;`。 5. 在主窗口类的构造函数创建QTableWidget对象,并设置属性和布局。 ```cpp tableWidget = new QTableWidget(this); tableWidget->setRowCount(10); // 设置行数 tableWidget->setColumnCount(5); // 设置列数 tableWidget->horizontalHeader()->setStretchLastSection(true); // 自动根据窗口大小调整列宽 QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(tableWidget); setLayout(layout); ``` 6. 在主窗口类的槽函数添加以下代码来导入XLS数据: ```cpp QXlsx::Document xlsx("filename.xlsx"); for (int row = 1; row <= xlsx.dimension().rowCount(); ++row) { QTableWidgetItem *item; for (int col = 1; col <= xlsx.dimension().columnCount(); ++col) { if (row == 1) { item = new QTableWidgetItem(xlsx.read(row, col).toString()); tableWidget->setHorizontalHeaderItem(col - 1, item); } else { item = new QTableWidgetItem(xlsx.read(row, col).toString()); tableWidget->setItem(row - 2, col - 1, item); } } } ``` 7. 将"filename.xlsx"替换为实际的XLS文件路径。以上代码会将XLS文件的第一行作为表头,其余数据导入表格。 完成以上步骤后,编译和运行程序,XLS数据就会显示在QTableWidget了。你可以根据需要对表格进行进一步的操作和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D-A-X

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值