(Qt) QAxObject: Добавить лист Excel

У меня есть приложение Qt, работающее с Excel, и я хочу добавить лист в документ. Самое простое решение - просто позвоните

QAxObject *sheets = workbook->querySubObject("Worksheets");
sheets->dynamicCall("Add()");

Но так вы добавите лист ДО последнего существующего листа, но я хочу разместить его ПОСЛЕ последнего листа. Сгенерированная документация скажет вам:

IDispatch* Add (QVariant Before, QVariant After, QVariant Count, QVariant Type) [slot]

Connect a signal to this slot:

    QObject::connect(sender, SIGNAL(someSignal(QVariant, QVariant, QVariant, QVariant)), object, SLOT(Add(QVariant, QVariant, QVariant, QVariant)));
Or call the function directly:

    QVariantList params = ...
    QAxObject * result = object->querySubObject("Add(QVariant, QVariant, QVariant, QVariant)", params);

Но какими должны быть параметры? Как я вижу, "после" - это второй параметр, однако мне не нужно "до" вообще. Что я должен указать в качестве параметров?

2 ответа

Вы должны указать последний и новый лист, в противном случае, если BEFORE и AFTER были оба опущены, новый лист будет вставлен перед активным листом по умолчанию.

Вы можете сделать что-то вроде этого, чтобы вставить после последнего листа:

// set of sheets
QAxObject* sheets = workbook->querySubObject( "Worksheets" );

// Sheets number
int intCount = sheets->property("Count").toInt();

// Capture last sheet and add new sheet
QAxObject* lastSheet = sheets->querySubObject("Item(int)", intCount);
sheets->dynamicCall("Add(QVariant)", lastSheet->asVariant());

// Capture the new sheet and move to after last sheet
QAxObject* newSheet = sheets->querySubObject("Item(int)", intCount);
lastSheet->dynamicCall("Move(QVariant)", newSheet->asVariant());

Regards,

  Valdir.

Я столкнулся с той же проблемой и решил ее таким же образом. не удалось заставить работать следующий синтаксис:

      sheets->dynamicCall("Add(After:=QVariant)", lastSheet->asVariant());

Ни один :

      sheets->dynamicCall("Add(Null, QVariant)", lastSheet->asVariant());

Ни :

      sheets->dynamicCall("Add(QVariant, QVariant)", QVariant(), lastSheet->asVariant());
Другие вопросы по тегам