Название: Как вставить разрыв страници в Excel Отправлено: Wlad_C от Ноябрь 03, 2010, 18:22 Добрый вечер!
Записал макрос вставки разрыва страницы в Excel, получил: ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell В программе из активной страницы получаем HPageBreaks : QAxObject * hPageBreaks = Sheets->querySubObject("HPageBreaks"); Используя функцию hPageBreaks->generateDocumentation(); получаем получаем документацию в формате html на HPageBreaks, и видим такие строчки для нужной нам функции Add: QVariantList params = ... QAxObject * result = object->querySubObject("Add(IDispatch*)", params); Вот здесь и возникает проблема! Для вставки разрыва нужно передать в качестве параметра активную ячейку в виде указателя на IDispatch! Получить активную ячейку как QAxObject не сложно. А вот как из QAxObject получить указатель на IDispatch? Может кто сталкивался с подобной проблемой? Буду очень признателен! Название: Re: Как вставить разрыв страници в Excel Отправлено: BRE от Ноябрь 03, 2010, 19:25 Посмотри на:
QVariant QAxBase::asVariant () const Название: Re: Как вставить разрыв страници в Excel Отправлено: Wlad_C от Ноябрь 03, 2010, 20:07 Цитировать QVariant QAxBase::asVariant () const - Не то. Я уже имею активную ячейку c типом QAxObject.Теперь ее нужно подставить в качестве параметра в функцию querySubObject("Add(IDispatch*)", ActiveCells) Но функция требует приведение (IDispatch*) ActiveCells что сделать не получается. Может есть какие - нибудь обходные пути? Название: Re: Как вставить разрыв страници в Excel Отправлено: BRE от Ноябрь 03, 2010, 20:08 Код
Название: Re: Как вставить разрыв страници в Excel Отправлено: Wlad_C от Ноябрь 03, 2010, 20:51 Вы оказались правы! Это я не догнал.
Я активную ячейку получал так: QVariant ActiveCell = App->property("ActiveCell"); А надо было так: Код: QAxObject * Sheets = Workbook->querySubObject( "Sheets" ); Этот код работает! Название: Re: Как вставить разрыв страници в Excel Отправлено: Wlad_C от Ноябрь 03, 2010, 21:24 P.S.
В Qt придумана неплохая функция: generateDocumentation() Но верить тому, что там написано надо с большой оглядкой. Например, для интерфейса _Application она выдает: IDispatch* val = object->property("ActiveCell").toIDispatch*(); Хотя на самом деле мы получаем тип QVariant. Т.е. правильная запись должна быть такая: QVariant val = object->property("ActiveCell"); А для интерфейса HPageBreaks: QVariantList params = ... QAxObject * result = object->querySubObject("Add(IDispatch*)", params); Т.е. в params надо поместить (IDispatch*). Вот и возникает путаница. Видимо функция generateDocumentation() была написана давно, и с тех пор не модифицировалась. |