QVariant value = range->querySubObject("Find(QString, QVariant, QVariant, QVariant, QVariant, Qt::CaseSensitive)")->property("Value");出现报错Error calling IDispatch member Find: Type mismatch in parameter 5
时间: 2024-03-17 21:43:14 浏览: 74
这个错误提示是因为在调用 Find() 函数时,第 5 个参数的类型不匹配。根据代码中的参数列表,第 5 个参数应该是一个 QVariant 类型的变量,表示是否区分大小写,而在这里传入的是一个 Qt::CaseSensitive 枚举值。将参数修改为 QVariant(Qt::CaseSensitive) 可以解决这个问题:
```
QVariant caseSensitive(Qt::CaseSensitive);
QVariant value = range->querySubObject("Find(QString, QVariant, QVariant, QVariant, QVariant, QVariant)", "", caseSensitive, 1, 1)->property("Value");
```
这里使用一个名为 caseSensitive 的 QVariant 对象来表示区分大小写,然后将其作为参数传递给 Find() 函数。注意在第一个参数位置传入了一个空字符串,因为我们只需要查找任意单元格,而不需要指定查找的值。
相关问题
详细解析QVariant value = range->querySubObject("Find(QString, QVariant, QVariant, QVariant, QVariant, Qt::CaseSensitive)")->property("Value");
这段代码主要是使用 Qt 框架中的 QAxObject 类,通过操作 COM 组件实现功能。其中,QVariant 是 Qt 框架中的一种数据类型,可以表示多种类型的数据,包括字符串、整数、浮点数等等。range 是一个 QAxObject 对象,querySubObject 方法是在该对象上执行 COM 接口的方法。Find 方法是 Excel 中 Range 对象的一个方法,可以根据指定条件查找单元格或单元格区域。该方法有多个参数,分别为要查找的内容、查找起始位置、查找方向、查找类型、是否区分大小写和是否使用通配符等。这里传入了 6 个 QVariant 类型的参数,分别为要查找的字符串、查找起始位置、查找方向、查找类型、是否区分大小写和是否使用通配符。方法执行后,返回值是一个 QAxObject 对象,通过该对象的 property 方法获取 Value 属性,该属性的类型也是 QVariant,表示查找到的单元格的值。最终将该值赋值给了一个 QVariant 类型的变量 value。
params.append(3); //行数 params.append(4); //列数 //表格对象 QAxObject* datatable = tables->querySubObject("Add(QAxObject*, int, int, QVariant&, QVariant&)", params); datatable->setProperty("Style", "网格型"); //设置表头 QAxObject* rangeTitle = datatable->querySubObject("Cell(int, int)", 1, 1)->querySubObject("Range"); rangeTitle->querySubObject("ParagraphFormat")->setProperty("Alignment", "wdAlignParagraphCenter"); rangeTitle->querySubObject("Font")->setProperty("Size", 10.5); rangeTitle->dynamicCall("SetText(QString)", QStringLiteral("序号")); rangeTitle = datatable->querySubObject("Cell(int, int)", 1, 2)->querySubObject("Range"); rangeTitle->querySubObject("ParagraphFormat")->setProperty("Alignment", "wdAlignParagraphCenter"); rangeTitle->querySubObject("Font")->setProperty("Size", 10.5); rangeTitle->dynamicCall("SetText(QString)", QStringLiteral("测量值")); rangeTitle = datatable->querySubObject("Cell(int, int)", 1, 3)->querySubObject("Range"); rangeTitle->querySubObject("ParagraphFormat")->setProperty("Alignment", "wdAlignParagraphCenter"); rangeTitle->querySubObject("Font")->setProperty("Size", 10.5); rangeTitle->dynamicCall("SetText(QString)", QStringLiteral("理论值"));帮我改成六列五行,表头分别是:序号、孔深(m)、倾角、方位角、上下偏差、左右偏差
好的,我帮你修改代码。修改后的代码如下:
```cpp
params.append(5); //行数
params.append(6); //列数
//表格对象
QAxObject* datatable = tables->querySubObject("Add(QAxObject*, int, int, QVariant&, QVariant&)", params);
datatable->setProperty("Style", "网格型");
//设置表头
QAxObject* rangeTitle = datatable->querySubObject("Cell(int, int)", 1, 1)->querySubObject("Range");
rangeTitle->querySubObject("ParagraphFormat")->setProperty("Alignment", "wdAlignParagraphCenter");
rangeTitle->querySubObject("Font")->setProperty("Size", 10.5);
rangeTitle->dynamicCall("SetText(QString)", QStringLiteral("序号"));
rangeTitle = datatable->querySubObject("Cell(int, int)", 1, 2)->querySubObject("Range");
rangeTitle->querySubObject("ParagraphFormat")->setProperty("Alignment", "wdAlignParagraphCenter");
rangeTitle->querySubObject("Font")->setProperty("Size", 10.5);
rangeTitle->dynamicCall("SetText(QString)", QStringLiteral("孔深(m)"));
rangeTitle = datatable->querySubObject("Cell(int, int)", 1, 3)->querySubObject("Range");
rangeTitle->querySubObject("ParagraphFormat")->setProperty("Alignment", "wdAlignParagraphCenter");
rangeTitle->querySubObject("Font")->setProperty("Size", 10.5);
rangeTitle->dynamicCall("SetText(QString)", QStringLiteral("倾角"));
rangeTitle = datatable->querySubObject("Cell(int, int)", 1, 4)->querySubObject("Range");
rangeTitle->querySubObject("ParagraphFormat")->setProperty("Alignment", "wdAlignParagraphCenter");
rangeTitle->querySubObject("Font")->setProperty("Size", 10.5);
rangeTitle->dynamicCall("SetText(QString)", QStringLiteral("方位角"));
rangeTitle = datatable->querySubObject("Cell(int, int)", 1, 5)->querySubObject("Range");
rangeTitle->querySubObject("ParagraphFormat")->setProperty("Alignment", "wdAlignParagraphCenter");
rangeTitle->querySubObject("Font")->setProperty("Size", 10.5);
rangeTitle->dynamicCall("SetText(QString)", QStringLiteral("上下偏差"));
rangeTitle = datatable->querySubObject("Cell(int, int)", 1, 6)->querySubObject("Range");
rangeTitle->querySubObject("ParagraphFormat")->setProperty("Alignment", "wdAlignParagraphCenter");
rangeTitle->querySubObject("Font")->setProperty("Size", 10.5);
rangeTitle->dynamicCall("SetText(QString)", QStringLiteral("左右偏差"));
```
这样,表格的行数变为了五行,列数变为了六列,并且表头分别是:序号、孔深(m)、倾角、方位角、上下偏差、左右偏差。
阅读全文