AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.10.2009, 11:34   #9  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
И всё-таки сгодится в хозяйстве макро 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();
}
Запустив этот джоб в исходном виде вы получите такие картинки:

Название: PageSetup1.JPG
Просмотров: 4994

Размер: 5.8 КбНажмите на изображение для увеличения
Название: PageSetup2.JPG
Просмотров: 632
Размер:	54.0 Кб
ID:	5191

После запуска этого же джоба с закомментированными строками executePageSetup (см. в комментариях, где я прошу это сделать) картинки будут менее радостными:

Название: PageSetup3.JPG
Просмотров: 5010

Размер: 6.6 КбНажмите на изображение для увеличения
Название: PageSetup4.JPG
Просмотров: 678
Размер:	56.7 Кб
ID:	5193

Вот как-то так...

Уфф... И приятно, что ЦСКА вчера не посрамил Страну и выиграл 2:1
Теги
excel, масштаб, программно, com-объект

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
emeadaxsupport: How does the Export to Excel feature work under the hood? Blog bot DAX Blogs 0 07.09.2009 19:05
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:09.