一、简介
最近在帮老师做一个项目,需要在QT中读取EXCEL文件,下面分享一下代码。比如点击某个按钮之后能够选择文件夹中的EXCEL文件。
在终端中会显示数据类型和数据内容,这样我们就可以调用需要的数据了。
二、代码
代码如下(示例):
void MainWindow::on_pBGetInfo_clicked()
{
QString filePath=QFileDialog::getOpenFileName(this, QStringLiteral("选择Excel文件"), "",QStringLiteral("Exel file(*.xls *.xlsx)"));
if(filePath.isEmpty())return;
QAxObject* excel=new QAxObject(this);
excel->setControl("Excel.Application");//连接Excel控件
excel->dynamicCall("SetVisible (bool Visible)","false");//不显示窗体
excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
//qDebug() << filePath << endl;
//打开文件
QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合
workbooks->dynamicCall("Open (const QString&)", filePath);
QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿
//QAxObject *workbook = excel->querySubObject("Open (const QString &)", filePath);
qDebug() << "1" << endl;
//打开表
QAxObject *worksheets = workbook->querySubObject("Sheets");//获取工作表集合
QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);//工作表1,即sheet1
//qDebug() << "2" << endl;
//获取表中的数据到QVariant中
QAxObject *usedRange=worksheet->querySubObject("UsedRange");
QVariant var=usedRange->dynamicCall("value");
// qDebug() << "3" << endl;
QVariantList varRowContents=var.toList();
const int rowCount=varRowContents.size();
QVariantList tmp;
for(int i=0; i<rowCount; ++i)
{
tmp=varRowContents[i].toList();
//result.append(tmp);
qDebug() << tmp << endl;
}
//删除,防止程序关闭后有excel进程残留
excel->dynamicCall("Quit(void)");
delete excel;
}
如果对你有帮助的话欢迎点赞收藏~