Russian Qt Forum

Qt => ActiveX => Тема начата: ksergey85 от Ноябрь 18, 2014, 15:53



Название: PrintOut в Excel.
Отправлено: ksergey85 от Ноябрь 18, 2014, 15:53
Здравствуйте. Вопрос вроде бы простой, но добиться правды никак не могу.
Есть созданное Excel-приложение, в нем открыт документ, в документе может быть несколько листов, каждый лист может содержать любое количество данных. Как с помощью метода printOut() напечатать весь документ (то есть все листы документа), не вычисляя и не передавая в вызове количество страниц. В документации на метод PrintOut() говорится, что параметр To, задающий номер последней страницы для печати, является необязательным, и в случае его отсутствия напечатаны будут все страницы. Как выполнить такой вызов и возможно ли сделать то, что мне нужно?


Название: Re: PrintOut в Excel.
Отправлено: ksergey85 от Ноябрь 18, 2014, 16:47
Всё, разобрался. Значения необязательных параметров нужно передавать в вызов dynamicCall() в виде невалидных вариантов QVariant(). Есть только одна тонкость - нельзя пользоваться методом dynamicCall() принимающим параметры по одному через запятую, т.к. если метод встречает невалидный вариант, он считает, что предыдущий параметр был последним и список параметров будет неполным. Нужно пользоваться методом dynamicCall(), принимающим аргументы в виде списка. Вот как то так:

Код:
QVariantList printParameters = QVariantList() << QVariant(1) << QVariant() << QVariant(1) << QVariant(false) << QVariant(printerName) << QVariant(false) << QVariant(false);
bool printSuccessed = document->dynamicCall("PrintOut(From:=const QVariant&, To:=const QVariant&, Copies:=const QVariant&, Preview:=const QVariant&, ActivePrinter:=const QVariant&, PrintToFile:=const QVariant&, Collate:=const QVariant&)", printParameters).toBool();