Объект ts_idispatcher
Для использования механизма взаимодействия с другими программами через механизм OLE (Windows) удобно пользоваться объектом ts_idispatcher и одноименной функцией.
Это позволяет создавать собственные функции и манипулировать различными программами Windows. Например, если не хватает имеющихся функций в LABPP_Automat для работы с Excel можно создавать свои собственные процедуры.
Пример 1.
Подключиться к текущей активной таблице Excel чтобы считать значение из текущей ячейки.
Полученное значение вывести в окно сообщений программы.
//------------------------------------------------------
// Example
// Read number current cell in Excell table
// LABPP 2022
//------------------------------------------------------
int main()
{
int iIDispatchExcel;
object("create","ts_idispatch",iIDispatchExcel);
ts_idispatch(iIDispatchExcel,"attach","Excel.Application"); // create dispatcher object
int iVariantRange;
object("create","ts_variant",iVariantRange); // create variant object to obtain dispatcher object of the current active cell
int ires = ts_idispatch(iIDispatchExcel, "AutoWrap", iVariantRange, "DISPATCH_PROPERTYGET", "ActiveCell", 0);
if(ires != 0) {
return -1;
}
int iIDispatchActiveCell;
object("create","ts_idispatch",iIDispatchActiveCell);
ts_variant(iVariantRange,"get_pdispVal", iIDispatchActiveCell);
int iVariantParm;
object("create","ts_variant",iVariantParm);
// ts_variant(iVariantParm,"set_dblVal",111.10);
// ts_variant(iVariantParm,"set_bstrVal","Stop War");
ires = ts_idispatch(iIDispatchActiveCell,"AutoWrap", iVariantParm,"DISPATCH_PROPERTYGET", "FormulaR1C1", 0);
// ires = ts_idispatch(iIDispatchActiveCell,"AutoWrap", iVariantParm,"DISPATCH_PROPERTYGET", "Value", 0);
if (ires == 0)
{
string s;
ts_variant(iVariantParm, "get_value_simple",s);
coutvar << s;
int i;
ts_variant(iVariantParm, "get_value_simple",i);
coutvar << i;
double d;
ts_variant(iVariantParm, "get_value_simple",d);
coutvar << d;
}
object("delete",iVariantParm);
object("delete",iVariantRange);
object("delete",iIDispatchActiveCell);
ts_idispatch(iIDispatchExcel,"detach");
object("delete",iIDispatchExcel);
}
Пример 2.
Подключиться к текущей активной таблице Excel чтобы записать значение в текущую ячейку.
//------------------------------------------------------
// Example
// Write number 111.10 to current cell in Excell table
// LABPP 2022
//------------------------------------------------------
int main()
{
int iIDispatchExcel;
object("create","ts_idispatch",iIDispatchExcel);
ts_idispatch(iIDispatchExcel,"attach","Excel.Application"); // create dispatcher object
int iVariantRange;
object("create","ts_variant",iVariantRange); // create variant object to obtain dispatcher object of the current active cell
int ires = ts_idispatch(iIDispatchExcel, "AutoWrap", iVariantRange, "DISPATCH_PROPERTYGET", "ActiveCell", 0);
if(ires != 0) {
return -1;
}
int iIDispatchActiveCell;
object("create","ts_idispatch",iIDispatchActiveCell);
ts_variant(iVariantRange,"get_pdispVal", iIDispatchActiveCell);
int iVariantParm;
object("create","ts_variant",iVariantParm);
// ts_variant(iVariantParm,"set_dblVal",111.10);
ts_variant(iVariantParm,"set_value_simple","Stop War");
int iVariantNull;
object("create","ts_variant",iVariantNull);
ires = ts_idispatch(iIDispatchActiveCell,"AutoWrap", iVariantNull,"DISPATCH_PROPERTYPUT", "FormulaR1C1", 1, iVariantParm);
object("delete",iVariantParm);
object("delete",iVariantRange);
object("delete",iIDispatchActiveCell);
object("delete",iVariantNull);
ts_idispatch(iIDispatchExcel,"detach");
object("delete",iIDispatchExcel);
}