前景提要
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 为空 QAxObject xsl excel 读取 问题补充:排查过程
该数据库读取采用了某些网上大佬提供的Range方式,一次读入大量的数据,在设定搜索方区之后出现了取出来的value值Qvariant无法转换为QvariantList类型的情况,初步判断为数据读取失败。
补充
已经核对过数据的行号列号以及表的行数列数没什么问题,convertToColName功能主要是根据列数返回最后一个单元格的行号,比如列号超过26则改变为AA,AB等,该函数完成此功能,不具体写出来了,这个没什么问题。 关于小熊 | 初学一级 | 园豆: 193
提问于:2020-07-15 17:32 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(1) 0 已解决方案:
经过各种方法的测试,可谓是经历了千辛万苦,发现是excel系统版本的问题,网上很多例子可能是在office03或者13下使用的,但现在主流的都到16了,导致原来的操作命令出现了变化,只需修改property("Value")为dynamicCall(“Value2()”)就好了。 关于小熊 | 园豆:193 (初学一级) | 2020-07-16 17:35 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。