AXForum  
Вернуться   AXForum > Блоги > Gustav'ово бложище, или Записки DAX-дилетанта-III
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

Стараюсь писать про Аксапту, хотя частенько тянет в Офис
Рейтинг: 5.00. Голосов: 3.

Повышение комфортности разработки при использовании Spreadsheet

Запись от Gustav размещена 12.11.2009 в 16:51

Считая себя увлеченным популяризатором Excel и всего, что на нее (него) похоже, развиваю дальше тему OWC Spreadsheet.

Если решено использовать Spreadsheet для определенной задачи в приложение Axapta (например, отображать в диалоге, как было показано в моем предыдущем собщении: http://www.axforum.info/forums/blog.php?b=26), то управлять его свойствами при программировании приходится практически вслепую. Такое достижение программирующего человечества, как технология IntelliSense, обеспечивающая автоматическое "дописывание" операторов, имен свойств, методов и событий по мере их ввода, а также открывающая список элементов объекта при завершении его имени точкой ".", увы, не работает для переменных типа COM.

Приходится поступать так: записывать скрипт в Excel (вручную или макрорекордером), переводить его на язык X++ и далее отлаживать, устраняя отдельные недоразумения (всё же Spreadsheet - не точная копия Excel и имеет в ряде случаев свое специфическое поведение).

Это сообщение ставит целью поменять вышеупомянутые шаги местами и сделать перевод с VBA на X++ самым последним и неутомительным рутинным этапом всей процедуры внедрения кода по "обслуживанию" Spreadsheet в приложении Axapta.

Первыми же (более творческими) этапами предлагается сделать записывание в Excel кода VBA макрорекордером, его ручное подправление при необходимости и "переключение" этого кода на выполнение в Spreadsheet (помещенном в рассматриваемом ниже случае на лист Excel). Попутно также устраняются обнаруженные разночтения между Excel и Spreadsheet, НО (!) пользуясь всей мощью IntelliSence уже для самого Spreadsheet, а не для используемого для "черновых" набросков Excel. Что еще не маловажно - визуально уже в самом Spreadsheet же контролируется прописываемое поведение этого объекта (т.е. во время отладки не нужно всякий раз запускать форму, как это было бы при отладке в Аксапте).

Итак, что собственно? Собственно следующее - вручную нарисуем в Excel элемент управления Spreadsheet и напишем несколько строк VBA по назначению этого элемента управления объектной переменной типа Spreadsheet. Как вы правильно поняли, всё происходит в Excel, Axapta здесь только путеводная звезда, к которой мы плывем со своим отлаженным кодом. Отмечу, что целевым приложением может быть и не Axapta, но любое другое, работающее с элементами ActiveX.

ШАГИ:
  • откроем Excel (пусть 2003 - я по-прежнему больше люблю то, что старше версии 2007).
  • найдём панель инструментов "Control Toolbox" и нажмем на ней кнопку "More Controls" (с пиктограммой с перекрещенными ключом и молотком)
  • в открывшемся списке выберем "MIcrosoft Office Spreadsheet 10.0" (или 11.0 или др.) и нарисуем появившимся крестиком рамку внедряемого объекта прямо на текущем листе Excel
  • покинем режим конструирования, отжав кнопку "Design Mode" (с угольником и линейкой) и перейдём в редактор VBA (Alt+F11)
  • создадим новый модуль и поместим в него следующий код:
Код:
Sub assignSpreadsheetObjectToVariable()

    Dim ss As Spreadsheet
    
    Set ss = ActiveSheet.OLEObjects(1).Object
    
    
    ' и дальше ведем здесь разработку
    ' с использованием переменной ss
   
    ss.Range("A1").Value = "Мы управляем Spreadsheet'ом из Excel"
    ss.Range(ss.Cells(2, 2), ss.Cells(5, 6)).Interior.ColorIndex = 35
    
End Sub
  • запустим этот код (F5) и убедимся, что он работает
.
Всё! Далее в этой же процедуре можно сочинять свою обработку Spreadsheet, которую по окончании перевести на язык X++:

Нажмите на изображение для увеличения
Название: Spreadsheet_IntelliSence.JPG
Просмотров: 933
Размер:	29.0 Кб
ID:	23
Размещено в Без категории
Просмотров 40578 Комментарии 0
Всего комментариев 0

Комментарии

 


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