前面说过了怎么保存Qt中的数据到excel,现在再来说一说怎么读取excel中的数据到Qt(无论是读取到表格中,还是保存到数据模型中,核心的一点都是将excel中的数据读取到Qt的容器中,然后只要能读取容器中的数据,那么后面是保存到表格还是模型,都是很简单的事了)。
假设我们已经有这么一个由Qt保存好的excel表格,现在想要读取其中的数据
代码如下:
void Widget::on_readbtn_clicked() { QAxObject *excel = new QAxObject(this);//建立excel操作对象 excel->setControl("Excel.Application");//连接Excel控件 excel->setProperty("Visible", false);//显示窗体看效果,选择ture将会看到excel表格被打开 excel->setProperty("DisplayAlerts", true);//显示警告看效果 QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿(excel文件)集合 QString str = QFileDialog::getOpenFileName(this,"打开", QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation),"Excel 文件(*.xls *.xlsx)"); workbooks->dynamicCall("Open(const QString&)", str);//打开刚才选定的excel QAxObject *workbook = excel->querySubObject("ActiveWorkBook"); QAxObject *worksheet = workbook->querySubObject("WorkSheets(int)",1); QAxObject *usedRange = worksheet->querySubObject("UsedRange");//获取表格中的数据范围 QVariant var = usedRange->dynamicCall("Value");//将所有的数据读取刀QVariant容器中保存 QList<QList<QVariant>> excel_list;//用于将QVariant转换为Qlist的二维数组 QVariantList varRows=var.toList(); if(varRows.isEmpty()) { return; } const int row_count = varRows.size(); QVariantList rowData; for(int i=0;i<row_count;++i) { rowData = varRows[i].toList(); excel_list.push_back(rowData); }//转换完毕
qDebug()<<excel_list.at(3).at(1).toInt(); //然后将二维数组Qlist<Qlist<QVariant>>中的数据读取出来,到表格或者数据模型中,具体在这里过程省略 workbook->dynamicCall( "Close(Boolean)", false ); excel->dynamicCall( "Quit(void)" ); delete excel;//因为前面选择了不显示excel窗口,如果这里不删除excel的话,excel依然是打开的,只是我们看不见(因为被隐藏起来了) }
其中标红的那一行代码可以用来测试是否能成功读取出二维数组中的数据。
当输入 qDebug()<<excel_list.at(3);时,打印的结果为
因为excel中一共有24列,但是只有6行中有数据,因此可以看到这其实是把表格中第4行的数据(因为是从零开始0,1,2,3)全部读取出来了。
当输入 qDebug()<<excel_list.at(3).at(3);时,打印结果为
即打印出了第4行第4列的数据.。
当输入qDebug()<<excel_list.at(3).at(3).toInt();时,打印的结果就是数字3。
由此,读取excel工作基本完成,至于怎么保存到表格中或者模型中,就看自己喜好啦。