首页 新闻 赞助 找找看

Qaxobject读取数据块时出错,无法获取value值是怎么回事?

0
悬赏园豆:5 [待解决问题]

1.数据库快速读取
QAxObject *excel = NULL;
QAxObject *workbooks = NULL;
QAxObject *workbook = NULL;
excel = new QAxObject("Excel.Application");
if (!excel) { qDebug() << "EXCEL对象丢失!"; }
excel->dynamicCall("SetVisible(bool)", false);
workbooks = excel->querySubObject("WorkBooks");
workbook = workbooks->querySubObject("Open(QString, QVariant)", FileName); QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", 1);
QAxObject * usedrange = worksheet->querySubObject("UsedRange");
QAxObject * rows = usedrange->querySubObject("Rows");
QAxObject * columns = usedrange->querySubObject("Columns"); int intRows = rows->property("Count").toInt();
int intCols = columns->property("Count").toInt();
qDebug() << "xls行数:"<<intRows;
qDebug() << "xls列数:"<<intCols;
QString Range;
covertToColName(intCols,Range);
Range+=QString::number(intRows);
Range = "A1:"+Range;
QAxObject *allEnvData = worksheet->querySubObject("Range(QString)", Range); QVariant allEnvDataQVariant = allEnvData->property("Value");
QVariantList allEnvDataList = allEnvDataQVariant.toList();//allEnvDataList 为空

问题补充:

排查过程
该数据库读取采用了某些网上大佬提供的Range方式,一次读入大量的数据,在设定搜索方区之后出现了取出来的value值Qvariant无法转换为QvariantList类型的情况,初步判断为数据读取失败。
补充
已经核对过数据的行号列号以及表的行数列数没什么问题,convertToColName功能主要是根据列数返回最后一个单元格的行号,比如列号超过26则改变为AA,AB等,该函数完成此功能,不具体写出来了,这个没什么问题。

关于小熊的主页 关于小熊 | 初学一级 | 园豆:193
提问于:2020-07-15 17:32
< >
分享
所有回答(1)
0

已解决方案:

经过各种方法的测试,可谓是经历了千辛万苦,发现是excel系统版本的问题,网上很多例子可能是在office03或者13下使用的,但现在主流的都到16了,导致原来的操作命令出现了变化,只需修改property("Value")为dynamicCall(“Value2()”)就好了。

关于小熊 | 园豆:193 (初学一级) | 2020-07-16 17:35

请问,如果我excel A1--D1开始有30行,能划定这样的范围吗

支持(0) 反对(0) XiaoBai呀 | 园豆:200 (初学一级) | 2021-05-21 10:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册