Qt中QAxObject读取Excel文件

来源:互联网 发布:厦门市网络预约 编辑:程序博客网 时间:2024/05/17 02:11

转载请注明t1234xy4原创:http://blog.csdn.net/t1234xy4/article/details/70326205


读取Excel文件时,可以用Qt自带的QAxObeject,本文对QAxObect的使用做了简单的介绍。

1、Qt封装了读取Excel的类。其头文件放在

#include <ActiveQt/QAxObject>

在创建时可以直接勾选。

2、另外需要在链接器中添加对应的dll文件

QAxContainerd.libQAxContainer.lib
3、读取Excel文件的代码如下:

int ReadExcelApp::readExcel(QString filename){QAxObject *excel = NULL;QAxObject *workbooks = NULL;QAxObject *workbook = NULL;excel = new QAxObject("Excel.Application");if(!excel){QMessageBox::critical(this,"Error:","Excel Object Missing!");return -1;}excel->dynamicCall("SetVisible(bool)",false);workbooks = excel->querySubObject("WorkBooks");if(!workbooks){QMessageBox::critical(this,"Error:","Open WorkBooks error!");return -1;}workbook = workbooks->querySubObject("Open(QString,QVariant)",\QString(filename));if(!workbook){QMessageBox::critical(this,"Error:","Open CSV error!");return -1;}QAxObject* sheets = workbook->querySubObject("Sheets");if(!sheets){QMessageBox::critical(this,"Error:","Open sheets error!");return -1;}QAxObject* worksheet = sheets->querySubObject("Item(int)",1);if(!worksheet){QMessageBox::critical(this,"Error:","Open sheet error!");return -1;}QAxObject* usedrange = worksheet->querySubObject("UsedRange");if(!usedrange){QMessageBox::critical(this,"Error:","Get UsedRange error!");return -1;}QAxObject* rows = usedrange->querySubObject("Rows");if(!rows){QMessageBox::critical(this,"Error:","Get Rows error!");return -1;}QAxObject* colums = usedrange->querySubObject("Columns");if(!colums){QMessageBox::critical(this,"Error:","Get Columns error!");return -1;}int iRowStart = usedrange->property("Row").toInt();int iColStart = usedrange->property("Column").toInt();int iRows = rows->property("Count").toInt();int iCols = colums->property("Count").toInt();for(int r=iRowStart; r<iRowStart+iRows;r++){for(int c = iColStart; c<iColStart+iCols; c++){QAxObject* cell = worksheet->querySubObject("Cells(int,int)",r,c);//qDebug() <<"("<<r <<","<< c << "):" << cell->dynamicCall("Value2()").toString();}}delete excel;excel = NULL;return 0;}

本文使用以上代码读CSV文件,其中不存在单元格合并的情况,若存在合并单元格或许需要特别处理。


0 0
原创粉丝点击