寫 excel

    // step1:連線控制元件
QAxObject* excel = new QAxObject(this);
excel->setControl("Excel.Application"); // 連線Excel控制元件
excel->dynamicCall("SetVisible (bool Visible)", "false"); // 不顯示窗體
excel->setProperty("DisplayAlerts", false); // 不顯示任何警告資訊。如果為true, 那麼關閉時會出現類似"檔案已修改,是否儲存"的提示 // step2: 開啟工作簿
QAxObject* workbooks = excel->querySubObject("WorkBooks"); // 獲取工作簿集合
workbooks->dynamicCall("Add"); // 新建一個工作簿
QAxObject* workbook = excel->querySubObject("ActiveWorkBook"); // 獲取當前工作簿 // step3: 開啟sheet
QAxObject* worksheet = workbook->querySubObject("WorkSheets(int)", ); // 獲取工作表集合的工作表1, 即sheet1 QAxObject* cell = worksheet->querySubObject("Cells(int, int)", , ); cell->dynamicCall("SetValue(conts QVariant&)", QVariant()); workbook->dynamicCall("SaveAs(const QString&)",QDir::currentPath() + "/IMEI.xlsx");
workbook->dynamicCall("Save()"); //儲存檔案
workbook->dynamicCall("Close(Boolean)", false); //關閉檔案 delete excel;

讀 excel

    QAxObject excel("Excel.Application");
excel.setProperty("Visible", false); //隱藏開啟的excel檔案介面
QAxObject *workbooks = excel.querySubObject("WorkBooks");
QAxObject *workbook = workbooks->querySubObject("Open(QString, QVariant)", QDir::currentPath() + "/IMEI.xls"); //開啟檔案
QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", ); //訪問第一個工作表
QAxObject * usedrange = worksheet->querySubObject("UsedRange");
QAxObject * rows = usedrange->querySubObject("Rows");
int intRows = rows->property("Count").toInt(); //行數
qDebug() << "使用了 " << intRows << " 行"; QString Range = "A1:B" +QString::number(intRows);
QAxObject *allEnvData = worksheet->querySubObject("Range(QString)", Range); //讀取範圍
QVariant allEnvDataQVariant = allEnvData->property("Value");
QVariantList allEnvDataList = allEnvDataQVariant.toList(); for(int i=; i< intRows; i++)
{
QVariantList allEnvDataList_i = allEnvDataList[i].toList() ;
QString data1 = allEnvDataList_i[].toString(); //第i行第0列的資料
qDebug() << data1;
}
workbooks->dynamicCall("Close()");
excel.dynamicCall("Quit()");

如果出現以下情況,可能是所選的Excel控制元件不支援要開啟的excel檔案(.xls、.xlsx)

讀寫 excel

    QAxObject *excel = new QAxObject("Excel.Application");
uint8_t flag = ;
excel->setProperty("Visible", false); //隱藏開啟的excel檔案介面
QAxObject *workbooks = excel->querySubObject("WorkBooks"); QFile file_xls(QDir::currentPath() + "/IMEI.xls");
QAxObject *workbook;
if(file_xls.exists())
{
qDebug() << "檔案已存在";
workbook = workbooks->querySubObject("Open(QString, QVariant)", QDir::currentPath() + "/IMEI.xls"); //開啟檔案
}else
{
qDebug() << "檔案不存在,建立一個";
workbooks->dynamicCall("Add"); // 新建一個工作簿
workbook = excel->querySubObject("ActiveWorkBook"); // 獲取當前工作簿
} QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", ); //訪問第一個工作表
QAxObject * usedrange = worksheet->querySubObject("UsedRange");
QAxObject * columns = usedrange->querySubObject("Columns");
columns->dynamicCall("AutoFit");
QAxObject * rows = usedrange->querySubObject("Rows");
int intRows = rows->property("Count").toInt(); //行數,實際使用0行或者1行,這個值都是1
QString Range = "A1:B" +QString::number(intRows);
QAxObject *allEnvData = worksheet->querySubObject("Range(QString)", Range); //讀取範圍
QVariant allEnvDataQVariant = allEnvData->property("Value");
QVariantList allEnvDataList = allEnvDataQVariant.toList(); QString data;
for(int i=; i< intRows; i++)
{
QVariantList allEnvDataList_i = allEnvDataList[i].toList() ;
data = allEnvDataList_i[].toString(); //第i行第1列的資料
if(data == IMEI_str)
{
flag = ;
qDebug() << "excel 內已含此 IMEI";
break;
}
qDebug() << data;
}
if((data == "") && (intRows == ))
{
intRows = intRows -;
}
qDebug() << "使用了 " << intRows << " 行";
if(flag == )
{
QAxObject* cell = worksheet->querySubObject("Cells(int, int)", intRows+, );
cell->setProperty("NumberFormatLocal", "@"); // 設定為文字
cell->dynamicCall("SetValue(conts QVariant&)", QVariant(IMEI_str));
} if(!file_xls.exists())
{
workbook->dynamicCall("SaveAs(const QString&)",QDir::currentPath() + "/IMEI.xls");
}
workbook->dynamicCall("Close(Boolean)", true); //true為關閉前儲存
excel->dynamicCall("Quit()");
delete excel;