![]() |
#9 |
Moderator
|
И всё-таки сгодится в хозяйстве макро PAGE.SETUP
Я еще раз внимательно изучил ссылку-пилюлю: http://www.ozgrid.com/forum/showthread.php?t=49644.
Человеку, который там задает вопрос, нужно было следующее: прочитать значение процентов масштабирования после того, как ранее была применена подгонка по страницам (Fit to). Когда это делается вручную, то сначала устанавливаются значения Fit to и жмётся OK. Рабочий лист при этом должен быть с большим количеством данных, иначе эффекта масштабирования не будет - пустой лист не масштабируется. Далее повторно вызываем диалог "Page Setup" и видим, что в поле "Adjust to...% normal size" отображается конкретный процент масштабирования, который автоматически рассчитался в Excel по нашем параметрам подгонки. И пусть это значение нам и нужно получить в коде. Отвечающий на вопрос там предлагает дважды выполнить команду PAGE.SETUP. Но мы-то вроде умеем уже и без нее устанавливать необходимые свойства. Правда, оказывается, что этого недостаточно для получения значения Zoom'а... Не буду вдаваться в подробности, а просто приведу джоб в окончательном виде, когда мне удалось прочитать значение процентов масштабирования после подгонки, и вы сами всё увидите: X++: static void Job212_PageSetupReadPercent(Args _args) { ComExcelDocument_RU excel = new ComExcelDocument_RU(); COM doc; COM app; COM worksheet; COM pageSetup; COM temp; COM range; str macroFormula; str xlForLang = KKu::excelFormulaLanguage(app); int fitToPagesWide = 0; int fitToPagesTall = 5; COMVariant cvZoom = COMVariant::createFromBoolean(false); COMVariant cvZoomNum; COMVariant cvWide = fitToPagesWide ? COMVariant::createFromInt( fitToPagesWide ) : COMVariant::createFromBoolean( false ); COMVariant cvTall = fitToPagesTall ? COMVariant::createFromInt( fitToPagesTall ) : COMVariant::createFromBoolean( false ) ; void executePageSetup() { // даже "холостой" вызов PAGE.SETUP (т.е. без параметров) // как бы является нажатием кнопки ОК в диалоге "Page Setup" macroFormula = strFmt('%1()', xlForLang=='English'?'PAGE.SETUP':'ПАРАМЕТРЫ.СТРАНИЦЫ'); app.ExecuteExcel4Macro(macroFormula); } ; excel.newFile(); doc = excel.getComDocument(); app = doc.Application(); // заполняем лист большим количеством данных worksheet = app.ActiveSheet(); range = worksheet.Range('A1:Z1000'); range.Value2('test'); pageSetup = worksheet.PageSetup(); pageSetup.Zoom(cvZoom); pageSetup.FitToPagesWide(cvWide); pageSetup.FitToPagesTall(cvTall); // сравните с иным конечным видом диалога "Page Setup, // закомментировав следующую строку executePageSetup(); pageSetup.FitToPagesWide(cvZoom); // cvZoom здесь используется pageSetup.FitToPagesTall(cvZoom); // как носитель значения false // сравните с иным конечным видом диалога "Page Setup, // закомментировав следующую строку executePageSetup(); // читаем значение процентов масштабирования cvZoomNum = pageSetup.Zoom(); box::info(strFmt('Adjust to %1 % normal size', cvZoomNum.long())); // это для демонстрации того, что получается temp = app.Dialogs(); temp = temp.Item(#xlDialogPageSetup); temp.Show(); } После запуска этого же джоба с закомментированными строками executePageSetup (см. в комментариях, где я прошу это сделать) картинки будут менее радостными: Вот как-то так... Уфф... И приятно, что ЦСКА вчера не посрамил Страну и выиграл 2:1 ![]() |
|
Теги |
excel, масштаб, программно, com-объект |
|
|