//QT+=axcontainer
#include <QFileDialog>
#include <QAxObject>
#include <QVariant>
#include <QList>
void getExcelContent(QList<QList<QVariant>>& result)
{
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那么在关闭是会出现类似“文件已修改,是否保存”的提示
//打开文件
QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合
QAxObject *workbook = excel->querySubObject("Open (const QString &)", filePath);//获取当前工作簿
//打开表
//QAxObject *worksheets = workbook->querySubObject("Sheets");//获取工作表集合
QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);//工作表1,即sheet1
//获取表中的数据到QVariant中
QAxObject *usedRange=worksheet->querySubObject("UsedRange");
QVariant var=usedRange->dynamicCall("value");
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);
} //删除,防止程序关闭后有excel进程残留 excel->dynamicCall("Quit(void)"); delete excel;
}