1个回答
展开全部
Qt可以通过QAxServer和QAxContainer库来获取excel单元格位置。
方法是:通过QAxServer获得Excel应用程序对象QAxObject,然后使用QAxObject打开相应的excel文档,找到指定的工作表,从里面读取指定位置上的单元格。
示例:
在cpp文件中
#include <QAxObject>
QAxObject *workbooks = NULL;
QAxObject *workbook = NULL;
QAxObject *cell=NULL;
QAxObject *excel = new QAxObject("Excel.Application");//运行excel程序
if (excel->isNull()) {
QMessageBox::critical(0, "错误信息", "没有找到EXCEL应用程序");
return;
}
excel->dynamicCall("SetVisible(bool)", false);
workbooks = excel->querySubObject("WorkBooks");//查找工作表对象
workbook = workbooks->querySubObject("Open(QString,QVariant,QVariant)", fileName,3,true);//两个参数时,三个参数true和false都很正常,false 锁定excel文件,其它程序只能只读方式打开,否则程序正在处理excel文件时,在外面打开excel,程序异常退出
if (!workbook) {
QMessageBox::critical(0, "错误信息", "excel 文件不存在");
return;
}
QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", 1);//打开第一个sheet
QAxObject * usedrange = worksheet->querySubObject("UsedRange");//获取该sheet的使用范围对象
QAxObject * rows = usedrange->querySubObject("Rows");
QAxObject * columns = usedrange->querySubObject("Columns");
int intRowStart = usedrange->property("Row").toInt();
int intColStart = usedrange->property("Column").toInt();
int intCols = columns->property("Count").toInt();
int intRows = rows->property("Count").toInt();
for(int i=intRowstsrt;i <intRowStart + intRows;i++){
for(j=intColStart ;j<intColStrt+intCols;j++){
cell = worksheet->querySubObject("Cells(int,int)", i,j ); //获取单元格
if(cell->property("Value").type()==QVariant::Double){
qDebug()<<QString::number(cell->property("Value").toDouble(),'f',0);
}else if(cell->property("Value").type()==QVariant::QString){
qDebug()<<cell->property("Value").toString();
}
}
}
workbook->dynamicCall("Close (Boolean)", false);
excel->dynamicCall("Quit (void)");
delete workbook;
delete workbooks;
delete excel;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询