Мир объектов Excel 2000

         

Библиотека функций


Практически сохранена библиотека функций Excel, допустимых при построении формул. Следует сказать, что чрезвычайно обширная библиотека функций Excel является его гордостью. Компонент Spreadsheet может также гордиться своей библиотекой. В ее состав входят функции, разбитые на 10 основных категорий:

Database - так называемые D-функции, предназначенные для работы с базами данных.Data and Time - для работы с датами и временем.Engineering - функции Бесселя и другие функции, применяемые в инженерных расчетах.Financial - финансовые функции.Information - функции, позволяющие получить тип данных и другую полезную информацию.Logical - логические функции.Lookup and Reference - функции поиска данных и перехода по ссылкам.Math - общематематические функции.Statistical - статистические функции.Text - функции, предназначенные для работы со строковыми данными.

Важно, однако, понимать, что не все функции, имеющиеся в Excel, реализованы, может быть реализовано только 95% функций, например, нет функции Transpose (транспонирования) из класса математических функций, Trend - из класса статистических функций, Asc - информационной функции и некоторых других функций. Более полную информацию о функциях, включенных в состав библиотеки, можно найти в справочной системе, сопровождающей компонент.



Дополнительные свойства объекта SpreadSheet


Рассмотрим те свойства, которые приобрел объект SpreadSheet. Многие из них связаны с главным предназначением этого объекта - обеспечением возможности интерактивной работы с электронной таблицей на Web-страницах.

ActivePane - это свойство заменяет свойство ActiveWindow и возвращает объект Pane - активное подокно, в котором размещается электронная таблица.AllowPropertyToolbox - булево свойство, позволяющее включать или отключать панель свойств в период выполнения.Управление видимыми размерами электронной таблицы. Ряд свойств позволяют управлять видимыми размерами. Свойство ViewableRange позволяет задать объект Range, определяющий область электронной таблицы, допустимую для просмотра пользователем. Остальная область будет для него скрыта. Свойства MaxWidth, MaxHeight определяют максимальные размеры видимой части электронной таблицы по ширине и высоте. Они могут быть заданы либо в пикселях, либо в процентах от величины контейнера, содержащего электронную таблицу. Наконец, булево свойство AutoFit позволяет наилучшим способом отобразить допустимую для просмотра область. Если его значение задано, как True, то электронная таблица будет отображать допустимую для просмотра область со скроллингом или без него в зависимости от числа строк и столбцов области и значений MaxWidth и MaxHeight. Вот пример установки этих свойств в обработчике события OnLoad:

<script language=vbscript> Sub Window_onLoad() 'Инициализация параметров электронной таблицы With BooKFour_1787_WebCalc .ViewableRange = "A1:G10" .MaxWidth = "90%" .MaxHeight = "90%" .AutoFit = True End With End Sub </script>

Этот код я добавил в конец тега <body> html-кода, полученного при сохранении рабочего листа книги Excel с именем BookFour в виде интерактивной Web-страницы. Событие OnLoad возникает при загрузке Web-страницы в браузер, соответственно вызывается обработчик этого события. Поэтому при открытии страницы будут установлены параметры, задающие область просмотра и то, как она будет отображаться. Вот как выглядит эта страница, открытая в Internet Explorer:



увеличить изображение
Рис. 10.4.  Управление отображением области, допустимой для просмотра

Заметьте, если уменьшить значение параметров MaxWidth и MaxHeight, например, до 50%, то область отображения электронной таблицы уменьшится, и появятся полосы, позволяющие осуществлять скроллинг внутри области. Свойство BuildNumber задает номер версии компонента.Булево свойство CanUndo со статусом "только для чтения" возвращает значение True, если предыдущее действие может быть отменено.Работа с именованными константами в VBScript. Свойство Constants позволяет справиться с проблемой типизированных констант в VBScript. Язык VBScript, как известно, не типизирован. С другой стороны, константы, используемые при работе с объектами, типизированы и принадлежат типам, задаваемым соответствующими перечислениями. Свойство Constants позволяет обойти ограничение VBScript и дает возможность работы с именованными константами, принадлежащим различным перечислениям. Это свойство задает набор из всех именованных констант VB. После вызова свойства достаточно указать через точку имя константы, чтобы работать с ней в VBScript также как и в VB /VBA . Вот небольшой пример кода на использование трех последних свойств:

Dim myc 'Задание набора констант Set myc = .Constants .Range("D5:F8").Borders.Weight = myc.owcLineWeightThick .Range("D5:F8").Borders.Color = "Green" .TitleBar.Caption = "OWC SpreadSheet Build - " & .BuildNumber .TitleBar.Font.Color = "Green" If .CanUndo Then .TitleBar.Font.Color = RGB(255,125,125)

Этот код я добавил в предыдущую процедуру Window_onLoad. Не буду приводить рисунка, демонстрирующего изменения внешнего вида электронной таблицы. Замечу, что все отработало должным образом. Свойство CanUndo вернуло значение True, так что цвет в заголовке окончательно был установлен с использованием функции RGB.Управление данными. Я уже говорил о вводе-выводе данных в электронную таблицу. Сейчас я более подробно расскажу о свойствах компонента SpreadSheet, предназначенных для управления вводом и выводом данных. Свойство CSVData позволяет задать строку, являющуюся источником данных для ввода в ячейки электронной таблицы. Данные в строке должны разделяться символом "," (запятая). Свойство позволяет, как получать данные, так и возвращать строку данных. Свойство CSVURL также устанавливает или возвращает данные, разделенные символом "запятая", но источник данных в этом случае задается URL-адресом. Свойство HTMLData позволяет получать или возвращать данные, представленные в HTML-таблице. Свойство HTMLURL позволяет работать с данными такого же формата, но источник данных задается URL-адресом. Это может быть, например, адрес Web-страницы, на которой расположена HTML-таблица. Источником может быть и страница документа Excel 2000, сохраненная как интерактивная Web-страница. Если одновременно заданы несколько из этих свойств, то возникает дилемма, откуда брать данные. Свойство DataType позволяет решить данную проблему. Четыре возможных значения этого свойства совпадают с именами четырех рассмотренных только что свойств, задающих источники данных. Значение DataType однозначно определяет, каким свойством следует пользоваться для доставки данных.Display-свойства. Серия этих свойств позволяет отображать те или иные элементы электронной таблицы - заголовки столбцов и строк, сетку, вертикальную и горизонтальную полосу прокрутки, панель свойств и панель инструментов, заголовок таблицы. Вот их перечисление: DisplayColHeaders, DisplayRowHeaders, DisplayGridlines, DisplayHorizontalScrollBar, DisplayVerticalScrollBar, DisplayPropertyToolbox, DisplayToolbar, DisplayTitlebar. Конечно же, всеми этими элементами можно управлять и в объектной модели Excel, но там они не являются свойствами объекта Application. Enable-свойства. Серия этих свойств позволяет включать или отключать те или иные возможности электронной таблицы - автоматическое вычисление, возможность отката. Вот эти свойства: EnableAutoCalculate, EnableUndo.ScreenUpdating - булево свойство, позволяющее отключить перерисовку экрана при обновлении данных. Полезно пользоваться этим свойством при программном обновлении данных. До начала обновления установить это свойство, как False, затем обновить все необходимые данные, затем установить для свойства значение True, чтобы перерисовать экран, когда все данные изменились.

Практически я рассмотрел все свойства объекта SpreadSheet. Как видите, их немало, и есть новые свойства, весьма полезные при программной работе с интерактивными документами.


Другие свойства


Конечно же, объект Chart обладает свойствами, позволяющими при отображении диаграмм показывать не только саму диаграмму, но и все ее основные элементы оси категорий и значений, заголовок и легенду. Сохранена также такая важная возможность, как показ линии тренда с прогнозом будущих и предыдущих значений, не представленных данными диаграммы. Можно также показывать на диаграмме интервалы, задающие возможную погрешность данных. Следует отметить, что не сохранена возможность показа текущих справок при подведении курсора к той или иной области диаграммы. Однако при желании, эту возможность можно ввести в собственном решении, используя программную настройку и те возможности, которые предоставляет объектная модель компонента Chart.

На следующем рисунке показана уже знакомая диаграмма с данными об объемах продаж, просматриваемая в Internet Explorer. На диаграмме показана линия тренда с прогнозом продаж, которые можно ожидать от одного из продавцов в следующем периоде. Для данных другого продавца показаны пределы возможной погрешности.


увеличить изображение
Рис. 10.6.  Диаграмма с линией тренда и интервалом погрешностей



Форматирование


Допускается форматирование внешнего вида электронной таблицы. Замечу, что можно удалить сетку, заголовок таблицы, имена столбцов. Разрешается удалять и добавлять строки и столбцы таблицы, изменять их размеры, форматировать отдельные ячейки, изменять границы, шрифты и производить другие подобные операции.





Гиперссылки


Компонент поддерживает переход по гиперссылкам, задающим адреса (URL) в Интернете. Достаточно напечатать в любой ячейке строку, начинающуюся с http://, как она будет воспринята в качестве гиперссылки и щелчок по этой ячейке задаст переход к соответствующей странице в Интернете. Другой способ состоит в том, чтобы задать в ячейке таблицы формулу, вызывающую функцию Hyperlink.



Инструментальная панель


Инструментальная панель расположена в верхней части компонента Pivot Table и содержит 19 командных кнопок, часть из которых уже знакома нам по интерфейсу компонента SpreadSheet, часть - по работе с инструментальной панелью сводной таблицы в Excel. Вот краткое описание этих кнопок:

- кнопка с логотипом Office отображает информацию о компоненте, задавая номер инсталлированной версии. Имеет ссылку, позволяющую перейти на узел технической поддержки пользователей программных продуктов Microsoft.
- позволяет скопировать выделенную часть сводной таблицы в буфер, а затем содержимое буфера перенести в то или иное приложение. Таким образом, можно осуществлять передачу данных от компонента Pivot Table в приложения, допускающие работу с буфером. Заметьте, что в отличие от компонента SpreadSheet, здесь нет кнопки Paste, так что обратная передача данных не допускается. Очевидно, что наличие этой возможности противоречило бы самой сути сводных таблиц, поскольку проводимый анализ не связан с изменением данных в процессе анализа. Данные можно изменять только в самом источнике.
- знакомые нам кнопки позволяют проводить сортировку выделенных данных сводной таблицы в порядке возрастания или убывания. Последняя из этой группы кнопок включает или выключает фильтр, заданный полями фильтра сводной таблицы.
- кнопка автосуммирования позволяет произвести вычисление итогов для выбранного поля, применяя одну из возможных функций. Серый цвет кнопки означает, что тип поля не позволяет подводить итоги или провайдер не обеспечивает выполнения такой функции. Замечу, что OLAP-провайдер не допускает автосуммирования, поскольку подобные вычисления проводятся на стороне сервера, а не на клиентской машине. Таким образом, при работе с кубами OLAP эта кнопка всегда будет оставаться серой.
- позволяет включать или выключать промежуточные итоги для выбранного поля. Эта кнопка работает и для OLAP-провайдера.
- эта группа кнопок позволяет перемещать поля между измерениями, перенося поле соответственно на ось строк, столбцов, фильтра или в область данных.
- эта пара кнопок также позволяетперемещать поля, но внутри одного измерения, меняя их порядок следования.
- включает или выключает иерархию, допустимую для данного измерения.
- обновляет список полей сводной таблицы, с учетом всех изменений, которые могли произойти в источнике данных.
- создает новую рабочую книгу Excel и копирует туда сводную таблицу с сохранением ее интерактивности. Это позволяет сохранить в Excel структуру сводной таблицы, выбранную пользователем. Замечу, что данные не передаются в Excel, а поступают туда из источника данных. Возможность экспорта сводной таблицы в Excel, конечно же, увеличивает мощь компонента Pivot Table.
- открывает инструментальную панель свойств, набор кнопок которой зависит от контекста, - какой из элементов сводной таблицы является выделенным.
- открывает окно, содержащее список полей, доступных для конструирования сводной таблицы в интерактивном режиме.
- открывает справочную систему по компоненту Pivot Table.



Интерфейс


Как можно видеть на рис. 10.1, в верхней части компонента SpreadSheet располагается панель инструментальных кнопок, каждая из которых позволяет выполнять определенное действие над данными электронной таблицы. Опишем коротко назначение этих кнопок.

- кнопка с логотипом Office отображает информацию о компоненте, задавая номер инсталлированной версии. Имеет ссылку, позволяющую перейти на узел технической поддержки пользователей программных продуктов Microsoft.
- позволяет производить "откат" - поочередно отменяя последние выполненные действия.
- хорошо известные кнопки, позволяющие выполнять операции "Вырезать", "Копировать", "Вставить".
- кнопка автосуммирования, позволяющая выполнять одну из самых распространенных операций над данными.
- эта группа кнопок выполняет операции по сортировке и фильтрации данных, о которых я говорил чуть выше.
- кнопка, позволяющая осуществлять экспорт данных электронной таблицы SpreadSheet в Excel, создавая новую рабочую книгу Excel. Я еще буду говорить об этой возможности в следующем параграфе.
- открывает справочную систему по компоненту SpreadSheet.
- эта кнопка открывает инструментальную панель, элементы которой задают расширенные возможности управления свойствами компонента SpreadSheet. Вот как выглядит эта панель в раскрытом виде:


Рис. 10.2.  Инструментальная панель управления свойствами компонента SpreadSheet


Как можно видеть на рис. 10.1, в верхней части компонента SpreadSheet располагается панель инструментальных кнопок, каждая из которых позволяет выполнять определенное действие над данными электронной таблицы. Опишем коротко назначение этих кнопок.

- кнопка с логотипом Office отображает информацию о компоненте, задавая номер инсталлированной версии. Имеет ссылку, позволяющую перейти на узел технической поддержки пользователей программных продуктов Microsoft.
- позволяет производить "откат" - поочередно отменяя последние выполненные действия.
- хорошо известные кнопки, позволяющие выполнять операции "Вырезать", "Копировать", "Вставить".
- кнопка автосуммирования, позволяющая выполнять одну из самых распространенных операций над данными.
- эта группа кнопок выполняет операции по сортировке и фильтрации данных, о которых я говорил чуть выше.
- кнопка, позволяющая осуществлять экспорт данных электронной таблицы SpreadSheet в Excel, создавая новую рабочую книгу Excel. Я еще буду говорить об этой возможности в следующем параграфе.
- открывает справочную систему по компоненту SpreadSheet.
- эта кнопка открывает инструментальную панель, элементы которой задают расширенные возможности управления свойствами компонента SpreadSheet. Вот как выглядит эта панель в раскрытом виде:


Рис. 10.2.  Инструментальная панель управления свойствами компонента SpreadSheet




Элемент Chart не имеет собственного интерфейса. Поэтому если поместить этот элемент в единственном числе на Web-странице или в каком-либо другом допустимом контейнере, то у пользователя не будет никаких возможностей взаимодействия с этим элементом. По существу, в этом случае все сведется лишь к статическому просмотру диаграммы. В этом тоже есть некоторый смысл, поскольку диаграмма при перерисовке будет отображать последние изменения источника данных. Возможны два пути решения проблемы создания интерактивной диаграммы:

Программное создание интерфейса. При построении собственных решений такой путь может оказаться предпочтительным, так как позволяет в полной мере дать пользователю необходимые средства графического представления данных, учитывающих специфику решаемой задачи.Размещение вместе с диаграммой источника данных. По этому пути пошел Microsoft, встраивая компоненты OWC в Office 2000. При сохранении диаграммы, как интерактивной Web-страницы, на эту страницу помещается не только компонент Chart, но и два других компонента - SpreadSheet и Data Source. Первый из них задает источник данных для построения диаграммы, второй - служит мостиком для передачи данных от компонента SpreadSheet к компоненту Chart. Достоинством такого подхода является то, что пользователь получает возможность изменять данные в таблице компонента SpreadSheet и тут же увидеть, как эти изменения отражаются на диаграмме. Пользователь может также использовать интерфейс компонента SpreadSheet, но он по-прежнему не сможет изменить, например, тип отображаемой диаграммы. В собственном решении можно сочетать достоинства обоих подходов.



Интерфейс компонента Pivot Table


Давайте поговорим теперь о том, что может делать пользователь, работая с компонентом Pivot Table в интерактивном режиме. Вот основные действия, доступные пользователю:

Изменение структуры сводной таблицы. Пользователь может перетаскивать поля, меняя их местами не только внутри одного измерения, но и перемещая их между измерениями. Так что поле, которое было полем строки, может по желанию пользователя стать полем столбца или полем фильтра.Группировать и разгруппировывать данные полей. Иерархии, заданные для измерений, позволяют проводить анализ "в глубину" с необходимой пользователю степенью детализации. О сути этого анализа я говорил ранее.Фильтровать данные. Задавая те или иные значения полей на оси фильтров, можно выполнять требуемую фильтрацию данных.Выполнять команды, определенные инструментальной панелью. Инструментальная панель компонента Pivot Table содержит набор командных кнопок, запускающих выполнение определенных команд.Выполнять расширенный набор команд. Помимо команд, вынесенных на инструментальную панель, пользователю доступен и расширенный набор команд, заданный специальной панелью свойств. Набор команд, появляющийся на этой панели, зависит от контекста, с которым работает пользователь. При выборе того или иного элемента сводной таблицы, например, поля данных или поля фильтра, на панели свойств будет отображаться набор команд, доступных для выполнения при работе с выбранным элементом сводной таблицы.



Как компонент PivotTable взаимодействует с источником данных OLAP


Одним из главных вопросов, требующих решения при работе со сводными таблицами, является организация связи с источником данных. Как я уже говорил, при создании в Excel такого инструмента анализа данных, как сводная таблица, с самого начала предполагалось, что основным источником данных для них будут внешние источники - базы данных. Естественно, что возможность использования в качестве источника данных таблиц самого Excel подразумевалась сама собой, и была гарантирована в первую очередь. Три основных типа внешних источников данных могут быть использованы сводными таблицами Excel:

Табличные - реляционные базы данных различного типа - MS Access, MS SQL Server и другие.Многомерные хранилища - прежде всего, кубы OLAP.XML-потоки - данные, поступающие из интернет.

Компонент Pivot Table сохранил все эти возможные источники данных. Более того, еще одним источником данных может быть DataSource - четвертый компонент, входящий в состав OWC. Для связи с базами данных используется интерфейс OLE DB - стандарт, разработанный Microsoft. Для связи с OLAP источниками данных Microsoft разработала модификацию этого стандарта - OLE DB for OLAP, которая позволяет взаимодействовать с многомерными хранилищами данных аналогично тому, как это взаимодействие происходит при работе с табличными базами данных. Этот стандарт поддерживается как базами данных от Microsoft, так и многими другими многомерными хранилищами данных.

Взаимодействие компонента с источником данных начинается с того, что указанный при соединении провайдер источника данных определяет механизм этого взаимодействия. Для OLE DB for OLAP провайдера используется интерфейс TCP/IP. После того как соединение установлено, в список полей компонента - Pivot Table Field List, который будет более подробно рассматриваться ниже - передается структура OLAP-куба, его поля, измерения, а также иерархии, связанные с измерениями. Когда пользователь начинает в интерактивном режиме оперировать со сводной таблицей или когда это делается программным путем, компонент Pivot Table генерирует соответствующий MDX-запрос (MultiDimensional Expression), определенный спецификациями интерфейса OLE DB for OLAP. Этот запрос передается на сервер, там выполняется, и результаты выполнения пересылаются клиенту. Поскольку серверу передается по существу один запрос, а результаты содержат агрегированные данные, то объем передаваемой информации сводится к минимуму, что и обеспечивает высокую эффекти вность работы при использовании OLAP-источников данных.



Каких свойств не имеет объект SpreadSheet


По понятным причинам объект SpreadSheet устроен намного проще, чем объект Application, а посему и многих свойств объекта Application он не имеет. Вот, например, чего у него нет:

Ряда Active-свойств, возвращающих активную диаграмму, рабочую книгу, принтер или окно.Свойств AddIns и ComAddIns, возвращающих соответствующие коллекции. Объект SpreadSheet может работать только с COM объектами.Свойств, возвращающих и позволяющих работать с такими объектами, как AnswerWizard, Assistant, Dialogs, FileSearch, CommandBars, Charts, Workbooks, Sheets, Windows и рядом других мощных объектов Excel.У объекта Application намного богаче совокупность булевых Display- свойств, позволяющая в Excel управлять отображением на экране тех или иных элементов, например, строки статуса.Аналогично обстоит дело и с Enable-свойствами. У объекта Application их значительно больше, они позволяют, например, включить или отключить звук или анимацию.

Я не буду подробно останавливаться на всех возможностях объекта Application. Перейдем к рассмотрению тех свойств объекта SpreadSheet, которых нет у объекта Application.



Компонент Chart


Говоря о замечательных свойствах приложения Excel, на первое место я поставил его машину вычислений. Второе место по справедливости занимает способность Excel представлять данные в наглядной графической форме. Казалось бы, что представление данных, хранящихся в таблицах, столь же информативно, как и их отображение в виде графиков и гистограмм. Более того, понятно, что информация, хранимая в больших таблицах Excel или в различных хранилищах данных, значительно более полна в сравнении с той, которая может быть отображена в тех или иных графиках и гистограммах. Однако для человека графическая форма представления информации является более приемлемой, позволяя ему значительно быстрее воспринять информацию, обработать ее, осознать тенденции процессов, показанных на графиках, что, в конечном итоге, позволяет быстро принять необходимые решения. Компонент Chart реализует практически в полном объеме все возможности Excel по визуализации данных - представлению их в графической форме.



Компонент Data Source


Компонент Data Source (DSC), оставаясь невидимым, выполняет большую работу по связыванию с различными внешними источниками данных, построению и выполнению команд по их доставке. В свою очередь он служит, как правило, источником данных для других компонент OWC - SpreadSheet, Chart, Pivot Table. Этот компонент несет основную нагрузку по доставке данных и при работе со страницами доступа данных в Access (Access 2000 Data Access Pages).

Так как DSC реализует стандартный интерфейс источников данных - IDataSource Interface, - определенный и поддерживаемый Internet Explorer (начиная с версии 5) и Visual Basic (начиная с версии 6), то эти контейнеры воспринимают его как правильный источник данных. Это означает, что при размещении компонента DSC на Web-странице или на форме Visual Basic он может служить источником данных для других элементов, расположенных на этой странице или форме.

Замечу, что не только DSC, но и другие компоненты OWC могут служить источниками данных и удовлетворяют интерфейсу IDataSource. Так, компонент SpreadSheet может поставлять данные компонентам Chart и Pivot Table, а последний, в свою очередь, может поставлять данные для компонента Chart.

Источники данных имеют достаточно сложную структуру и состоят из наборов данных, называемых элементами (членами) источника - Data Member. Каждый такой элемент задает некоторый набор данных - Recordset, который может использоваться при связывании источника данных с тем или иным элементом, расположенным на Web-странице. Для компонента SpreadSheet в качестве элемента источника - Data Member - может использоваться любой диапазон его ячеек. Для компонента DSC элементы источника следует определять. Эти определения элементов составляют специальную коллекцию - RecordsetDefs.

В детали объектной модели этого компонента я углубляться не буду. Вместо этого я приведу пример, в котором на Web-странице строится круговая диаграмма по данным внешнего источника - базы данных Access. Посредником в связывании данных будет выступать компонент Data Source. На этом примере я постараюсь прояснить и роль Data Member, и роль RecordsetDefs.

Прежде чем перейти к примеру, хочу отметить следующее. Надеюсь, понятно, что поскольку элемент является невидимым, то никакого интерфейса у него нет, так что общение с ним возможно только на программном уровне. Поэтому в данном разделе я приведу достаточно большой кусок программного кода. Следует заметить также, что элемент действительно невидим в момент выполнения, например при просмотре Web-страницы в Internet Explorer. Однако в режиме проектирования, например, при открытии страницы в приложении FrontPage, местоположение элемента отмечается небольшим значком с изображением ключа -

.



Компонент PivotTable


В предыдущей главе, посвященной анализу офисной деятельности, подробно рассматривались сводные таблицы - один из самых мощных инструментов, позволяющий эффективно анализировать большие объемы данных, хранящихся в различных источниках. Сводные таблицы позволяют анализировать информацию под разными углами зрения, получать различные срезы, сортировать, фильтровать, группировать данные нужным образом. Сводные диаграммы, тесно связанные со сводными таблицами, позволяют тут же отобразить в графической форме полученную информацию.

Конечно же, иметь подобный инструмент при работе с документами в интрасетях чрезвычайно важно. И такой инструмент был создан - среди компонентов OWC имеется компонент PivotTable, позволяющий создать интерактивный Web-документ, содержащий сводную таблицу, с которой можно практически работать также, как в обычном Excel.



Компонент Spreadsheet


Приложение Excel многофункционально. Excel создавался как электронная таблица, - и в этом его основное назначение. Главная особенность электронной таблицы состоит в том, что в ее ячейки можно вводить не только данные, но и формулы. Формулы Excel, также как и обычные математические формулы и выражения в языках программирования, оперируют при вычислении значений константами, переменными и функциями. В электронной таблице роль переменных играют отдельные ячейки и области таблицы. Машина вычислений, связанная с электронной таблицей, при каждом изменении данных в таблице, инициированных пользователем или внешними ссылками, пересчитывает формулы, зависящие от этих данных. Такие повторные вычисления делают электронную таблицу живой, - изменение значения одной ячейки приводит, возможно, к пересчету всей таблицы.

Компонент Spreadsheet представляет электронную таблицу, наследующую многие из свойств электронной таблицы Excel. Рассмотрим основные свойства этой электронной таблицы.



Компоненты OWC и офисное программирование


Подводя итоги, отмечу, что включенные в состав Office 2000 компоненты OWC выполняют важную работу, позволяя проводить полноценный анализ данных, возможный ранее только в Excel, как при работе в интрасетях, так и при построении собственных решений на базе различных контейнеров, допускающих работу с COM-объектами.

Как и всегда при работе в мощной среде Office 2000, многие задачи, требующие использования этих компонентов, могут решаться "руками" - по существу, несколькими нажатиями кнопки мыши. Однако, возможно, самое главное достоинство этой среды, в том числе и компонентов OWC, заключается в том, что можно произвести тонкую настройку решения, учитывающую специфику задачи. Когда стандартных решений становится недостаточно, за дело берется программист, который, работая с имеющимися в его распоряжении объектами среды, может создать собственное решение, существенно расширяющее стандартные возможности среды.

Объектная модель компонент OWC весьма разнообразна и предоставляет программисту широкие возможности. Программная работа по созданию решений, использующих компоненты OWC, по существу, является важной частью офисного программирования.



Компоненты OWC, работающие на стороне сервера


Одно из достоинств компонентов OWC заключается в том, что они могут работать на стороне сервера. Причины, по которым целесообразно перенести их работу на сервер, могут быть самыми разными. Вот три основные:

У клиента нет компонентов OWC и он не располагает лицензией на Office 2000, необходимой при легальной работе с компонентами.Клиент открывает Web-страницы в браузере, не являющемся контейнером COM-объектов, например, клиент использует обозреватель NetScape.В ряде случаев эффективнее перенести всю работу на сервер, а клиенту пересылать по запросу или в момент возникновения определенных событий моментальные снимки диаграмм, электронных и сводных таблиц.

Обычно Com-объекты работают либо как видимые объекты, либо как невидимые объекты (in memory). Компоненты OWC спроектированы так, что для них возможны оба способа работы. На стороне сервера они работают, конечно же, как невидимые объекты, поскольку там нет клиента, который мог бы с ними работать в интерактивном режиме. Они создаются программно, с использованием метода CreateObject, вызываемого объектом Server. Вот как может выглядеть код, создающий на стороне сервера компонент Chart, или, более точно, основной его объект cspase:

Set m_cspace = Server.CreateObject("OWC.Chart")

После того как объект получен, остальная часть работы с этим объектом на сервере ведется так же, как и на стороне клиента. Завершающим аккордом на стороне сервера является преобразование построенной диаграммы или сводной таблицы в графический образ, который и пересылается клиенту. Для этой цели используется метод ExportPicture, которым обладают компоненты OWC.



Копирование и работа с буфером


Одними из основных операций, которые чаще всего выполняют пользователи, работающие в интерактивном режиме с электронной таблицей, - это операции "Копировать" - "Вставить", использующие буфер. Поскольку есть ряд отличий от выполнения их в Excel, то на некоторые моменты хочу обратить внимание.

При копировании ячейки копируется все - формула, значение, формат. Эти элементы нельзя копировать независимо, так что известная по Excel команда Paste Special отсутствует. Никаких дополнительных операций, возможных в Excel в момент копирования, здесь нет.При копировании формул абсолютные ссылки остаются фиксированными, а относительные ссылки на ячейки изменяются нужным образом в момент вставки копируемой формулы в другую ячейку. При перемещении формул такого изменения не происходит. При вставке в ячейку копируемые или перемещаемые данные полностью заменяют содержимое ячейки.Копируемые данные хранятся в буфере в формате HTML до тех пор, пока в буфер не поступит очередная порция данных. В Excel это не так. В Excel выделенная ячейка имеет "хвостик", потянув за который можно скопировать содержимое ячейки в соседние ячейки, при этом относительные ссылки в формулах изменяются. Здесь такая операция невозможна. Нет и специального выделения копируемой или перемещаемой области данных.

Копирование и вставка используются не только для операций, выполняемых внутри электронной таблицы, но и для обмена данными с другими программами.



Машина вычислений


Машина вычислений компонента Spreadsheet практически сохраняет все основные возможности машины вычислений Excel. Конечно же, здесь нет возможности вести циклические вычисления, тем более, нет встроенных возможностей по решению оптимизационных задач. Но вычисления, определяющие суть электронной таблицы, ведутся по тому же алгоритму, что и в Excel.



Методы объекта


Объект имеет 5 методов: Calculate, Eval, ShowAllData, Export, Scroll, первые три из которых в этом списке унаследованы от объекта WorkSheet модели Excel.

Метод Export(FileName, ExportAction) позволяет экспортировать электронную таблицу. Второй аргумент метода указывает нужно ли открыть таблицу в Excel или сохранить ее в файле, имя которого задается первым аргументом метода.

Метод Scroll(Range) производит горизонтальную и вертикальную прокрутку так, чтобы область, заданная аргументом попала в левый верхний угол электронной таблицы.



Методы объекта Range


Что касается методов объекта Range, то их чуть более 20, и практически все они наследованы от объекта Excel.Range. Из специфических методов можно упомянуть лишь два:

LoadText - позволяет загружать данные из текстового файла в заданную область. Об этом методе я уже говорил при описании объекта SpreadSheet.FreezePanes - "замораживает" подокно. Вот небольшой пример. В предыдущей процедуре можно видеть следующие строчки:'Замораживание подокна myr.FreezePanes myc.ssFreezeTop

В результате действия этого оператора произошло расщепление окна, и окружающее сверху подокно было заморожено, так что, например, прокрутка не оказывает действие на это подокно - оно всегда видимо. Заметьте, на рисунке 10.5 видна черта, отделяющая подокна.

Я уже говорил о том, что можно делать с помощью методов объекта Range. Напомню, - можно выполнять фильтрацию, сортировку и поиск данных в пределах области. Можно осуществлять чистку содержимого и формата, удалять и вставлять столбцы и строки и ряд других подобных операций.

На этом я закончу рассмотрение объектной модели компонента SpreadSheet. Я специально достаточно подробно рассмотрел эту модель, чтобы показать, что объекты OWC построены также как и все остальные объекты Office 2000, и работа с этими объектами ведется аналогичным образом. Для других компонентов OWC я не буду уже столь подробно разбирать объектную модель, а ограничусь кратким обзором и примерами.



Методы объекта SpreadSheet


Методов у объекта SpreadSheet немного - всего 9. Три из них схожи с методами объекта Excel.Application. Два из этих методов - Union и Intersect задают объединение и пересечение областей электронной таблицы, возвращая соответствующий объект Range в качестве результата. От одноименных методов объекта Application отличаются числом возможных аргументов. У методов объекта SpreadSheet аргументов два - Range1 и Range2, которые и задают области, пересечение или объединение которых ищется. Методы объекта Application позволяют проводить эти операции одновременно над большим числом аргументов. Третий общий метод Undo также имеет некоторые различия в семантике. Для объекта SpreadSheet он позволяет не только отменить последнее действие, сделанное, например, пользователем в процессе работы с интерфейсными объектами, но и отменить действия последнего выполняемого программного блока, помеченного специальными метками "BeginUndo" и "EndUndo".

Из 6 методов, специально созданных для объекта SpreadSheet, методы:

BeginUndo, EndUndo - позволяют произвести разметку программного блока, чтобы можно было при необходимости отменить его выполнение, вызвав метод Undo.LoadText - позволяет загрузить в электронную таблицу данные из текстового файла. В отличие от свойства CSVURL, позволяющего решать схожую задачу, ограничителем данных в текстовом файле может выступать не только символ "запятая", но и другие ограничители - пробелы, символы табуляции и другие.Refresh - позволяет провести обновление данных, перезагружая их из источника и перерисовывая объект - электронную таблицу.UpdatePropertyToolbox - позволяет обновить значения свойств, заданных панелью свойств.AddIn - добавляет Addin к объекту, позволяя работать с его свойствами и методами.



Объект SpreadSheet.Range


Объект Range является основой основ в объектной модели Excel. Также обстоит дело и в модели компонента SpreadSheet. Десятки свойств и методов различных объектов этой модели возвращают в качестве результата объект Range. Заметьте, коллекции Cells, Rows, Columns, возвращаемые одноименными свойствами, являются одновременно объектами Range. Такие свойства как Range, Selection, ViewableRange, VisibleRange, такие методы как Union, Intersection и многие другие - возвращают объект Range.

Модель этого объекта хорошо отработана еще в Excel и потому не удивительно, что объект SpreadSheet.Range унаследовал большую часть свойств объекта Excel.Range. Конечно, часть свойств исходного объекта была потеряна - исчезла возможность работы с формулами над массивами, возможность хранения зависимостей, работы с циклическими ссылками, но основные свойства объекта Excel.Range сохранились. Заметьте, у объекта SpreadSheet.Range почти не появилось новых свойств, которых не было бы у объекта Excel.Range. Достаточно сказать, что из 46 свойств объекта SpreadSheet.Range 45 свойств перешли по наследству от объекта Excel.Range. Появилось лишь одно новое свойство - HTMLData, о котором уже шла речь при рассмотрении объекта SpreadSheet. Для объекта Range это свойство имеет статус "только для чтения" и позволяет вернуть HTML-таблицу, хранящуюся в ячейках области, заданной объектом Range.

Поскольку объект Excel.Range описан мной достаточно подробно, то я не буду останавливаться на деталях описания аналогичных свойств объекта SpreadSheet.Range , и даже не буду всех их перечислять. Скажу только, что свойства объекта позволяют работать с коллекциями ячеек, строк и столбцов области, отдельными ячейками, границами области, используемым шрифтом, формулами и значениями, хранимыми в ячейках, их форматами и многим другим.

Приведу пример программной работы с объектами Range. Заметьте, эти объекты уже появлялись в ранее приведенной процедуре - обработчике события OnLoad объекта Window. Но еще один пример не помешает. К Web-странице, показанной на рис. 10.4, я добавил командную кнопку. Вот описание соответствующего тега:

<p><input type="button" value="Работа с объектом Range" name="myButton" OnClick = WorkWithRange></p>


Далее я написал обработчик события Click для этой кнопки, в котором создаю и работаю с объектами Range нашей электронной таблицы, размещенной на этой странице. Вот VBScript код этого обработчика:

Sub WorkWithRange()

'Работа с областями электронной таблицы Dim myc 'Задание набора констант Dim myr, myr1, myr2, myr3, myr4, myr5, myr6 'объекты Range Dim strFormula 'Строка, задающая формулу

With BooKFour_1787_WebCalc Set myc = .Constants Set myr2 = .Range("E12:G14") myr2.Borders.Weight = myc.owcLineWeightMedium myr2.Borders.Color = "Blue" 'Изменяю область, доступную для просмотра .ViewableRange = "A1:G20" 'Создаю объекты Range для программной работы с ними Set myr = .Range("A11:G20") With myr .Font.Size = 12 .Font.Bold = True Set myr1 = .Cells(2,5) myr1.Value = "Строки и столбцы" Set myr3 = myr1.Offset(1) myr3.Value = myr.Rows.Count Set myr4 =myr1.Offset(1,1) myr4.Value = myr.Columns.Count Set myr5 = myr1.Offset(2) strFormula = "=" & myr3.Address & "+" & myr4.Address myr5.Formula = strFormula Set myr6 = myr1.Offset(2,2) strFormula = "=" & myr3.Address & "*" & myr4.Address myr6.Formula = "=E13 * F13" 'Замораживание подокна myr.FreezePanes myc.ssFreezeTop End With End With

End Sub

В этом примере я создаю большое число объектов Range. В процессе работы с этими объектами создаются объекты Font и Borders, как результат вызова соответствующих свойств. Здесь же появляются коллекции Cells, Columns, Rows, являющиеся, как я уже говорил, объектами Range. Я использую различные свойства и методы объектов Range, - в частности, свойства ViewableRange, Address, Value, Formula, методы Offset и FreezePanes.

Взгляните, как выглядит страница в Internet Explorer после нажатия в окне браузера командной кнопки с именем "Работа с объектом Range":


увеличить изображение
Рис. 10.5.  Программная работа с областями электронной таблицы


Объект SpreadSheet.WorkSheet


Получить объект WorkSheet можно двумя способами - можно спуститься вниз по иерархии, вызвав свойство ActiveSheet корневого объекта SpreadSheet, можно подняться вверх по иерархии, вызвав свойство Parent объекта Range.



Объектная модель и программирование


Начну с некоторого обзора, позволяющего дать общее представление об объектной модели этого компонента. Прежде всего, замечу, что корневым объектом в этой модели является не объект Chart, а объект - ChartSpace, задающий пространство диаграммы, в котором можно разместить несколько объектов Chart. Содержательно это означает, что компонент ChartSpace играет роль листа книги, который может одновременно отображать несколько диаграмм. Для программиста важно то, что объект ChartSpace имеет свойство Charts, возвращающее коллекцию объектов Chart и для добавления элементов в эту коллекцию используется стандартный для коллекций метод Add.

Особую роль среди методов объекта ChartSpace играет метод ExportPicture, позволяющий экспортировать пространство диаграммы со всем ее содержимым в графический файл в формате GIF. Такой прием применяется при размещении компонент OWC на серверной стороне, о чем я еще скажу особо. Из свойств объекта Chart упомяну свойство Type, позволяющее задать тип диаграммы. Говоря о методах этого объекта, назову метод SetData, который используется для того, чтобы установить связь с разнообразными источниками данных и направить их в те или иные области диаграммы. Одноименный метод объекта Series, входящего в коллекцию серий данных - SeriesCollection объекта Chart, - позволяет загружать данные отдельной серии. Из событий объекта Chart нельзя не назвать событие DataSetChange. Это событие зажигается, когда связанный источник данных изменяет свои данные. При возникновении события компонент Chart автоматически перестраивается, чтобы соответствовать обновленным данным. Но, если обновление связано с изменением структуры диагра ммы, например, появлением новой серии, то для подобных обновлений следует написать собственный обработчик события.

В заключение обзора хочу представить схему, отражающую устройство основных объектов модели - ChartSpace, WCChart, WCSeries:


Рис. 10.7.  Схема устройства основных объектов модели


Третьим объектом, устройство которого показано на рисунке 10.6, является объект WCSeries, задающий одну группу (серию) данных, используемых для построения диаграммы. Как можно видеть, соответствующие свойства возвращают объекты, позволяющие программно работать не только с самими данными, но и строить тренды и доверительные интервалы для данной серии данных.

Я не буду дальше погружаться в описание деталей построения объектов, а ограничусь примером программного построения диаграммы на Web-странице. Я продолжил работу с HTML-документом, показанным на рис. 10.5. Я использовал этот документ для демонстрации некоторых возможностей работы с компонентом SpreadSheet и написал, как Вы помните обработчик события, связанного с нажатием соответствующей командной кнопки, расположенной на документе. Теперь я добавлю к документу еще одну командную кнопку, по нажатию которой будет строиться диаграмма, источником данных для которой будет компонент SpreadSheet, уже расположенный на этом документе. Чтобы пример был интереснее, я добавлю к документу еще один управляющий элемент - выпадающий список, элементы которого будут задавать тип диаграммы. Тем самым пользователь будет иметь возможность не только построить саму диаграмму, но и перед построением задать ее тип.

Все эти действия я выполнил в приложении FrontPage. Не буду останавливаться на деталях выполнения этого этапа работы. Приведу лишь описание тега <object>, в котором я определил компонент Chart:

<object id = "myChartSpace" classid = "CLSID:0002E500-0000-0000-C000-000000000046" width="5" height ="5">

Чтобы не усложнять пример, в списке, задающем тип диаграммы, я задал всего два элемента - "график" и "диаграмма". Прежде чем перейти к рассмотрению программного кода, взгляните на то, как выглядит Web-страница в начальный момент, до того как пользователь нажимал командные кнопки:


Рис. 10.8.  Начальное состояние Web-страницы

А вот как выглядит эта страница, после того, как из списка выбран тип "диаграмма" и нажата командная кнопка "Создать диаграмму":


увеличить изображение
Рис. 10.9.  Web-страница с программно построенной диаграммой

А теперь давайте разберемся в программном коде, решающем эту задачу. Вот текст обработчика события, вызываемого при нажатии командной кнопки:

Sub CreateChart() 'Создание диаграммы Dim myc 'Константы Dim cht 'Объект, задающий диаграмму Dim Ax 'Объект, задающий ось диаграммы Dim Ser 'Объект, задающий серию данных Dim strDebug 'Строка, используемая при отладке With myChartSpace 'strDebug="step 1 " 'MsgBox(strDebug) Set myc = .Constants 'размеры области диаграммы .width = "100%" .height = "300" 'Источник данных If .ChartDataSources.Count = 0 Then .DataSource = BooKFour_1787_WebCalc Else .DataSource.Refresh End If 'Добавляем Объект Chart в коллекцию Set cht = .Charts(0) 'strDebug="step 2 " 'MsgBox(strDebug & .Charts.Count) 'Устанавливаем его параметры With cht 'По умолчанию - тип диаграмма .Type = myc.chChartTypeColumnClustered strDebug = "ColumnClustered"



If SelType.Value = "График" Then .Type = myc.chChartTypeLineMarkers strDebug = "LineMarkers" End If 'MsgBox("Тип диаграммы - " & strDebug) 'Легенда и заголовок диаграмы .HasLegend = True .HasTitle = True .Title.Caption = "Дилеры и Объемы продаж" 'Заголовки осей Set Ax = .Axes(myc.chAxisPositionLeft) Ax.HasTitle = True Ax.Title.Font.Italic = True Ax.Title.Font.Bold = True Ax.Title.Caption = "Объем Продаж" Set Ax = .Axes(myc.chAxisPositionBottom) Ax.HasTitle = True Ax.Title.Font.size = 14 Ax.Title.Font.Bold = True Ax.Title.Caption = "Кварталы -2001" 'Установка данных .SetData myc.chDimCategories, 0, "C5:C8" .SetData myc.chDimSeriesNames, 0, "D4:F4" .SeriesCollection(0).SetData myc.chDimValues, 0, "D5:D8" .SeriesCollection(1).SetData myc.chDimValues, 0, "E5:E8" .SeriesCollection(2).SetData myc.chDimValues, 0, "F5:F8" 'Работа с серией данных. Определение тренда Set Ser = .SeriesCollection(1) Ser.TrendLines.Add Ser.TrendLines(0).Type = myc.chTrendLineTypeExponential Ser.TrendLines(0).Order = 2 Ser.TrendLines(0).IsDisplayingEquation = True

End With End With End Sub

Хотя процедура снабжена комментариями, но целесообразно дать дополнительные пояснения:

Прежде всего, я определяю объекты, с которыми предстоит работать - cht, Ax, Ser и другие. Хотя VBScript и бестиповый язык, но объявлять переменные все равно целесообразно - это правильный стиль программирования.Затем начинается работа с корневым объектом ChartSpace. Заметьте, имя MyChartSpace, которым я пользуюсь, - это ID объекта, заданное при определении соответствующего тега object, приведенного выше. Я использую свойства width и height, чтобы задать подходящую область пространства диаграмм. При первоначальном определении объекта в теге его размеры задавались минимальными, теперь область расширяется до подходящих размеров. В качестве источника данных задается объект SpreadSheet, расположенный на этой же Web-странице. Заметьте, я выполняю проверку того, не установлена ли уже связь с этим источником. Дело в том, что командная кнопка может нажиматься многократно и, следовательно, процедура может работать многократно, а попытка связи с уже присоединенным источником приводит к ошибке. Так что, когда связь уже установлена, то вызывается только метод Refresh для обновления данных источника.Обратите внимание, при создании объекта cht класса WCChart я не использую метод Add для добавления нового элемента в коллекцию, поскольку один элемент этой коллекции создается автоматически. Конечно, если бы я хотел одновременно показать несколько диаграмм, без использования этого метода не обойтись.На следующем этапе идет работа с уже созданным объектом cht, - задаются параметры, определяющие его элементы. Первым делом, я определяю тип строящейся диаграммы. Для этого используется значение, выбранное пользователем из выадающего списка. Имя списка - SelType - задается его ID, определенным при размещении элемента на Web-странице. Конечно, я без труда мог бы дать пользователю больший набор возможных типов, что лишь слегка бы увеличило размер нашей процедуры.Затем я создаю заголовок, включаю легенду и даю заголовки осям диаграммы. При этом приходится работать с различными объектами - Title, Legend, Axes, Axis и другими. Наиболее важный момент - это определение данных. В данном случае я определяю три серии данных и, соответственно, задаю три элемента коллекции SeriesCollection. Поскольку источником данных является электронная таблица - объект SpreadSheet, то мне достаточно указать диапазон ячеек, где находятся данные серии.На последнем шаге демонстрируется работа с отдельной серией. Для этой серии задается полиномиальный тренд.

Полагаю, что данный пример позволил продемонстрировать способы программной работы с компонентом Chart. В заключение взгляните, как выглядит этот же интерактивный документ, когда пользователь выберет из списка значение "график" и нажмет кнопку построения диаграммы:


увеличить изображение
Рис. 10.10.  Программное построение диаграммы другого типа


Объектная модель компонента SpreadSheet и программирование


Для программиста компонент SpreadSheet является обычным объектом, свойства и методы которого он может вызывать в своих программах, также как и проводить обработку событий, происходящих в процессе работы пользователя с компонентом. Замечу, что объектная модель компонента SpreadSheet во многом напоминает соответствующую часть объектной модели Excel. Программирование позволяет построить собственное решение, в полной мере использующее возможности этого компонента.

Прежде чем перейти к деталям, хочу напомнить об одной особенности построения объектной модели компонент OWC - объектные модели всех компонент построены независимо, нет объекта, объединяющего их, в который все они были бы вложены. Каждый из четырех рассматриваемых нами объектов является корневым объектом в соответствующей модели.

Я приведу сейчас описание основных элементов объектной модели компонента SpreadSheet, проводя по ходу дела сравнение с соответствующими объектами Excel. Напомню, что описание объектной модели Excel я дал в главе 11. Справочная система по объектам OWC доступна и находится в файле msowcvba.chm, путь к которому обычно следующий: C:\ProgranFiles\Microsoft Office\Office\1033.

Давайте вспомним, как устроена объектная модель Excel, На верхнем уровне здесь находится объект Application, в который среди прочего вложена коллекция рабочих книг - Workbooks, каждая из которых содержит коллекцию листов книги - Sheets. Листы книги могут быть разного типа, определяющее значение играют рабочие листы - объекты Worksheet. Одним из главных объектов рабочего листа, с которым чаще всего приходится работать программисту, является объект Range.

В объектной модели компонента SpreadSheet на верхнем уровне расположен сам объект SpreadSheet, он в определенном смысле играет роль объекта Application и во многом наследует его свойства и методы. Конечно же, никакой коллекции рабочих листов, не говоря уже о рабочих книгах, в объект SpreadSheet не вложено, в него встроен лишь объект Worksheet, задающий единственный рабочий лист, связанный с компонентом. Этот объект во многом устроен также как и его тезка в Excel, в частности, в него встроен объект Range, позволяющий программисту работать с областями рабочего листа, связанного с компонентом SpreadSheet.



Объекты SpreadSheet и Excel Application. Сравнительный анализ


Давайте рассмотрим свойства, общие для объектов SpreadSheet и Excel Application. Их сводка дана в следующей таблице:

Таблица 10.1. Общие свойства объектов SpreadSheet и Excel Application

СвойстваНазначение
ActiveCell, ActiveSheetАктивная ячейка и активная страница. Свойство ActiveSheet для объекта SpreadSheet играет значительно более важную роль, чем для объекта Application, поскольку именно оно возвращает центральный элемент этой модели - объект WorkSheet - тот единственный рабочий лист, который задает электронную таблицу.
Cells, Columns, RowsКоллекции ячеек, строк и столбцов
DisplayScrollBarБулево свойство, позволяющее включать или отключать скроллинг. У объекта Spreadsheet есть два свойства, позволяющие отдельно управлять вертикальным и горизонтальным скроллингом.
EnableEventsБулево свойство, позволяющее включать события объекта.
MoveAfterReturn, MoveAfretReturnDirectionБулево свойство, позволяющее указать, будет ли изменяться активная ячейка после ввода в нее данных и нажатия клавиши Enter, и свойство, задающее направление перемещения к новой активной ячейке.
RangeСвойство, возвращающее объект Range. Аргументы свойства позволяют задать требуемую область рабочего листа.
SelectionСвойство, возвращающее выделенный (активный) объект. Если выделена область в рабочем листе, то этот объект принадлежит классу Range.
VersionСвойство, возвращающее версию.

Общих свойств не столь уже и много. Может быть, более интересно понять, каких свойств объекта Application не имеет объект SpreadSheet, и какие дополнительные свойства он приобрел.



Область данных


С каждым компонентом Spreadsheet связывается один рабочий лист - одна электронная таблица. Ее максимальный размер 65536 строк на 702 столбца (с именами от A до ZZ). Заметьте, что в Excel 2000 при том же числе строк число столбцов меньше почти в три раза - всего 256. Однако не стоит особенно обольщаться возможным большим размером листа, так как тут же возникает проблема времени его загрузки при работе в сети.

Поскольку с каждым компонентом связывается только один лист, то при публикации на Web нельзя сохранить в интерактивном режиме сразу всю рабочую книгу Excel, состоящую из нескольких рабочих листов. Приходится независимо сохранять каждый рабочий лист или часть этого листа на отдельной Web-странице.



Обмен данными


Как и все элементы управления ActiveX, компонент SpreadSheet не имеет собственных средств, позволяющих открыть или сохранить этот элемент - команды Open и Save не являются частью интерфейса таких элементов. Выполнение этих функций - прерогатива контейнеров, содержащих эти элементы. Тем не менее, у объекта SpreadSheet есть целый набор способов, позволяющих ему общаться с внешним миром, - передавая и получая данные.



Office 2000 и OWC


Поскольку компоненты OWC встроены в Office 2000, то для большинства пользователей Office работа с компонентами скрыта. Пользователь, работающий с документами Excel или Access, может использовать эти компоненты, даже не подозревая о том, что он их использует. Конечно же, опытный пользователь - программист, знающий объектную модель компонентов и умеющий программировать на VBScript, может произвести настройку компонентов OWC, расположенных на Web-странице, включив дополнительные свойства, учитывающие специфику работы с его документом.

Включение компонентов OWC в состав Office 2000 привело к появлению новых возможностей по публикации документов в Excel 2000. В связи с этим существенно изменился внешний вид и функции диалогового окна "Сохранение документа". Также как и в Word, здесь появилась панель с кнопками (ярлыками), позволяющая уточнить расположение сохраняемого документа. В частности, кнопка "Web Folders" открывает Web-папки, хранящиеся на сервере, и позволяет публиковать документ (Web-страницу) непосредственно в папку на сервере, тем самым мгновенно делая его доступным всем участникам совместной работы над документом в интерсети. В этом же диалоговом окне можно указать, следует ли публиковать всю рабочую книгу или отдельный лист, нужно ли добавлять интерактивность публикуемой странице. Командная кнопка "Опубликовать" этой панели открывает новое диалоговое окно "Публикация Web-страницы", в котором можно более детально задать элемент рабочей книги, предназначенный для публикации, а также вид и

нтерактивности, придаваемой публикуемому элементу.

В зависимости от типа публикуемых данных на Web-странице автоматически располагаются различные Web-компоненты. Я не буду сейчас останавливаться на деталях этого процесса, но надеюсь, что из сказанного уже очевидно, что, работая в Excel, создавать интерактивные Web-страницы с встроенными компонентами OWC достаточно просто, - нужно лишь грамотно задавать параметры при сохранении страниц рабочей книги Excel или отдельных элементов этих страниц. Аналогичная ситуация имеет место и при работе в Access, где также могут автоматически создаваться интерактивные страницы с расположенными на них компонентами OWC.

Вот как выглядит в Internet Explorer соответствующая Web-страница, полученная при сохранении в Excel интерактивной диаграммы, расположенной на рабочем листе книги Excel.


увеличить изображение
Рис. 10.1.  Интерактивная диаграмма и рабочий лист с источником данных при просмотре в Internet Explorer

Заметьте, в этом случае на Web-страницу выносится как сама диаграмма, так и рабочий лист с источником данных этой диаграммы. В данном конкретном случае диаграмма отображает поквартальную динамику объема продаж, выполненных группой дилеров, с подведением итогов за год. При просмотре в Internet Explorer этой Web-страницы можно ввести новые, уточненные данные, например, за 3-й и 4-й кварталы - тут же машина вычислений пересчитает итоги, тут же перестроится и диаграмма.

Все это становится возможным благодаря тому, что на Web-странице в момент ее сохранения в Excel автоматически размещаются три компонента OWC - Chart, Data Source и SpreadSheet. Как я уже говорил, невидимый объект Data Source "стоит за спиной" объекта Chart, обеспечивая передачу ему данных. Вот часть HTML-кода, отвечающая за появление этих компонентов на Web-странице:

<object id="BookFour_29850_WebChart" codebase="file:G:\msowc.cab#version=9,0,0,2710" classid="CLSID:0002E500-0000-0000-C000-000000000046" width=378 height=217> <param name=XMLData value= …> </object> <object id="BookFour_29850_DSC" codebase="file:G:\msowc.cab#version=9,0,0,2710" classid="CLSID:0002E530-0000-0000-C000-000000000046"> <param name=XMLData value= …> </object> <object id="BookFour_29850_WebCalc" codebase="file:G:\msowc.cab#version=9,0,0,2710" classid="CLSID:0002E510-0000-0000-C000-000000000046"> <param name=DisplayTitleBar value=false> <param name=DataType value=HTMLData> <param name=HTMLData value= …> </object>

Компоненты вставляются как объекты. Параметр classid позволяет найти их, если они зарегистрированы на компьютере пользователя, просматривающего соответствующую Web-страницу. Параметр codebase позволяет найти их, если они еще не зарегистрированы. Контент, передаваемый компоненту, задается тегом param этих объектов. Я не привожу достаточно длинное значение параметра value этого тега. По правде говоря, можно обойтись и без задания этого контента, что будет видно из последующих примеров.

Надеюсь, понятно, что для того чтобы работа с этой страницей стала возможной, на компьютере пользователя должны присутствовать компоненты OWC или они должны быть доступны для загрузки с источника, указанного параметром codebase.

Давайте поговорим теперь более подробно о компонентах.



Панель свойств


Панель свойств задает дополнительный набор команд, которые можно выполнять над тем или иным элементом. Вот какой вид имеет эта панель при выборе поля строки:


Рис. 10.12.  Панель свойств элемента "поле строки"

Как видно на рисунке, свойства на этой панели сгруппированы по разделам. Для всех элементов сводной таблицы присутствует раздел "Общее", где отображается выбранный элемент сводной таблицы и есть кнопка, позволяющая перейти в справочную систему. Для всех элементов сводной таблицы доступен также раздел "Формат" с различными возможностями, зависящими от типа элементов. Форматирование позволяет менять используемый шрифт, цвета, размеры поля. Для числовых полей и полей дат разрешается применять различные форматы записи. Раздел "Отображение" позволяет изменять внешний вид сводной таблицы, включая или отключая те или иные элементы, например, индикаторы развертывания или главную инструментальную панель. Я не буду в деталях описывать все возможные команды, доступные на этой панели.



Пример использования DSC


В наших примерах неоднократно появлялась база данных "Офис РР". В главе 18 она использовалась при построении OLAP-куба и сводной таблицы. Теперь я воспользуюсь ею и построенным OLAP-кубом, чтобы создать Web-страницу, на которой будет строиться круговая диаграмма, отражающая вклад каждого из сотрудников в общее дело добывания заказов. На страницу будут помещены два компонента OWC - Chart и Data Source. Компонент DSC будет посредником в передаче данных от базы данных к диаграмме.

Наша страница не будет интерактивной, так как сам элемент Chart, как вы помните, не имеет собственной инструментальной панели. И я не буду выносить сами данные на страницу, передавая их, например, в элемент SpreadSheet. Не буду я и программно добавлять интерфейс элементу Chart. Тем не менее, этот пример кажется мне достаточно интересным, так как позволяет продемонстрировать, как самому создать страницу с расположенными на ней элементами OWC. А главное, он показывает роль DSC как посредника при передаче данных. Вот полный HTML-текст Web-страницы, созданной в редакторе FrontPage:

<html> <head> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <title>MDB-база данных -> Data Source -> Chart</title> <link rel="STYLESHEET" href="file:///Styles.css" type="text/css"> </head>

<body> <h1>Связывание: MDB-база данных -> Data Source -> Chart </h1>

<!-- Chart Control --> <object classid="clsid:0002E500-0000-0000-C000-000000000046" id="ChartSpace1" style="HEIGHT:80%; WIDTH:100%" width="576" height="384"> </object> <p> </p>

<!-- Data Source Control --> <object classid="clsid:0002E530-0000-0000-C000-000000000046" id="DSC" width="16" height="15"> <param name="XMLData" value="<xml xmlns="urn:schemas-microsoft-com:office:access"> <DataSourceControl> <OWCVersion <9.0.0.2710> </OWCVersion> <MaxRecords> 0 </MaxRecords> <GridX> 10 </GridX> <GridY> 10 </GridY> <Datamodel version="0816"> </Datamodel> </DataSourceControl> </xml>"> </object>


<!-- Script for loading the chart --> <script language=VBScript> '--------------------------------------------------------------------------
Sub Window_onLoad() ' Код выполняется при загрузке страницы в браузер. ' Устанавливается соединение компонента DSC с базой данных Access. ' Формируется RecordsetDef как источник данных для построения диаграммы. ' Установка строки соединения элемента DSC Dim sDBPath 'Путь к базе данных sDBPath = "c:\!o2000\DsCd\Ch19\dbPP2000.mdb" DSC.ConnectionString = _ "provider=microsoft.jet.oledb.4.0;data source=" & sDBPath
' Добавляется RecordsetDef с именем ChartData, ' который будет источником данных для компонента Chart ' Формируется запрос к базе данных Access Dim myQ 'Запрос к базе данных myQ = "SELECT Заказы.Сотрудник, Sum(Заказы.Стоимость) AS [Sum-Стоимость]" _ & "FROM Заказы " _ & "WHERE (((Заказы.ДатаЗаказа)>=#9/1/1997# And" _ & "(Заказы.ДатаЗаказа)<=#11/9/2001#))" _ & "GROUP BY Заказы.Сотрудник" 'Определение Recordset, который будет элементом, 'определяющим данные - Data Member для компонента Chart DSC.RecordsetDefs.AddNew myQ, DSC.Constants.dscCommandText, "ChartData"
'Вызов процедуры, осуществляющей связывание DSC с компонентом Chart. BindChartToDSC ChartSpace1, DSC, "ChartData", "Сотрудник", "SUM-Стоимость"
End Sub 'Window_onLoad()
'--------------------------------------------------------------------------
Sub BindChartToDSC(cspace, dsc, sRSName, sCategories, sValues) ' Связывает Chart с набором данных - Recordset компонента Data Source. ' Создает круговую диаграмму - Pie chart. ' Параметры процедуры: ' cspace ссылка на ChartSpace object ' dsc ссылка на Data Source control ' sRSName имя набора Recordset в Data Source ' sCategories имя столбца в наборе, содержащего имена сотрудников ' sValues имя столбца в наборе, содержащего суммарную стоимость заказов
Dim cht ' Chart object который будет создан в пространстве диаграммы Dim ser ' серия данных Dim dls 'метки круговой диаграммы ' Определение объекта Constants, позволяющего использовать ' именованные константы в script-коде. set c = cspace.Constants


' Чистим Chart space cspace.Clear
' Устанавливаем DSC как источник данных для Chart set cspace.DataSource = dsc
' Устанавливаем набор данных внутри Data Source, используемый Chart. cspace.DataMember = sRSName
' Создаем круговую диаграмму Pie chart в пространстве диаграмм. set cht = cspace.Charts.Add() cht.HasLegend = True cht.HasTitle = True cht.Title.Caption = "Распределение заказов в стоимостном исчислении" cht.Title.Font.Bold = True cht.Type = c.chChartTypePie
' Определяем единственную серию в диаграмме - объект ser ' и вызываем ее метод SetData для связывания с данными серии. ' Значение 0 второго параметра указывает, что используется первый набор ' данных источника Data Source. set ser = cht.SeriesCollection.Add() ser.SetData c.chDimCategories, 0, sCategories 'Ось категорий ser.SetData c.chDimValues, 0, sValues 'Ось значений
' задаем метки круговой диаграммы - Pie chart. set dls = ser.DataLabelsCollection.Add() dls.HasPercentage = True dls.HasValue = False End Sub 'BindChartToDSC()
</script> </body> </html>
А вот как выглядит эта страница, открытая в Internet Explorer:

увеличить изображение
Рис. 10.13.  Web-страница с компонентами Data Source и Chart
Главное в этом коде - сценарий, написанный мной на VBScript. Почти половину программного текста составляют комментарии, поясняющие все этапы работы. Тем не менее, я добавлю еще несколько общих замечаний:
На странице нет ничего, кроме заголовка, вставки двух компонентов OWC - Chart и Data Source - и, естественно, script кода.При открытии страницы в Internet Explorer будет вызываться обработчик этого события - процедура Window_onLoad. В ней и выполняется нужная нам работа по связыванию базы данных и компонентов.На первом шаге работы этой процедуры DSC связывается с базой данных и получает от нее данные. На втором шаге - вызывается процедура BindChartToDsc, строящая диаграмму, источником данных для которой уже служит сам DSC.
Говоря о работе DSC, можно отметить:
С использованием свойства этого компонента - ConnectionString - устанавливается связь с базой данных.


DSC.ConnectionString = "provider=microsoft.jet.oledb.4.0; data source=" & sDBPath
Соответствующая строка, как обычно, состоит из двух частей и задает провайдера базы данных и путь к самой базе. В данном случае используется провайдер Jet для связи с базой данных Access. Затем добавляется новый элемент в коллекцию RecordsetDefs, определяющий набор данных - Data Member источника данных. DSC.RecordsetDefs.AddNew myQ, DSC.Constants.dscCommandText, "ChartData"
Этот набор получает имя ChartData. Команда, определяющая действия по доставке данных, в данном случае задается текстом SQL-запроса к базе данных. Сам текст запроса записан в строку, заданную переменной myQ. В процессе выполнения запроса данные группируются, происходит суммирование стоимости всех заказов, выполненных тем или иным сотрудником. На следующем шаге вызывается процедура BindChartToDsc, строящая диаграмму, которой передается информация о DSC и его наборе данных - ChartData. Замечу еще, что для тех, кто привык работать с ADO, нет ничего нового в синтаксисе и семантике работы с DSC.
Несколько слов о работе процедуры BindChartToDsc. Отмечу главное:
set cspace.DataSource = dsc cspace.DataMember = sRSName
так устанавливается связь объекта cspace, - основного объекта, задающего пространство диаграммы, - с источником данных и набором данных внутри этого источника. Остальные операторы внутри процедуры выполняют рутинную работу по формированию различных областей диаграммы.
Надеюсь, этот пример позволяет ощутить возможности компонента DSC и его роль в получении данных от различных источников с последующей их передачей другим компонентам OWC.

Сортировка, фильтрация, поиск


Как я уже говорил, Excel является многофункциональным приложением, и над данными, располагаемыми на его страницах, можно выполнять самые разнообразные операции. Компонент SpreadSheet полной функциональностью Excel, конечно, не обладает; тем не менее, ряд важных дополнительных функций включен в его состав.

Сортировка. Сортируемые данные должны представлять список, - столбцы списка должны иметь заголовки, все элементы столбца иметь один и тот же тип, не допускаются пропуски элементов (пробелы). Разрешена сортировка данных, как в возрастающем, так и в убывающем порядке. Можно поочередно сортировать данные по нескольким столбцам, начиная со столбца с наиболее низким приоритетом.Фильтрация. Фильтрация означает отбор данных списка, удовлетворяющих определенным критериям. В Excel разрешена фильтрация списка на месте - AutoFilter и расширенная фильтрация с возможностью задания сложных критериев и размещением результатов на другом месте. У компонента SpreadSheet допустим только один вариант - AutoFilter, и критерии фильтрации существенно упрощены в сравнении с аналогичным вариантом Excel. Замечу, что спрятанные фильтром данные не сортируются, не копируются и не перемещаются. Они как бы отсутствуют до той поры, пока не будет снят фильтр.Поиск. Поиск можно вести как во всей электронной таблице, так и в выделенной области, задав соответствующее условие поиска в виде строки текста.



Создание интерактивных сводных таблиц в Excel


Самый простой способ создать интерактивную Web-страницу, содержащую сводную таблицу, - использовать для этой цели Excel. Здесь давно существовала возможность создать сводную таблицу по данным реляционной базы данных, например, Microsoft Access или Microsoft SQL Server. В Excel 2000 в процессе создания сводной таблицы можно параллельно создать и OLAP - куб, который и будет служить источником данных для этой таблицы. После того, как сводная таблица в Excel получена, ее можно сохранить в виде интерактивной Web-страницы, на которой будет помещен компонент PivotTable. При публикации можно присоединить и сводную диаграмму. Замечу, что фактически на Web-странице Excel разместит два компонента - PivotTable и Data Source. Источником данных для компонента Data Source может служить, например, OLAP-куб, а уж затем данные будут переданы компоненту PivotTable. Взгляните, как выглядит подобная Web-страница со сводной таблицей, открытая в Internet Explorer:


увеличить изображение
Рис. 10.11.  Интерактивная Web-страница со сводной таблицей



Список полей


Окно со списком полей играет важную роль в работе пользователя, предоставляя ему широкие возможности по конструированию сводной таблицы. Список полей создается, как я уже говорил, в тот момент, когда устанавливается связь с источником данных сводной таблицы. Он отображает все поля, доступные для формирования сводной таблицы. Например, для OLAP-куба это все его измерения и все иерархии. Пользователь может включать в сводную таблицу лишь часть из этих полей. Но в любой момент, открыв этот список, он может перестроить таблицу, добавив туда нужные ему поля. При удалении из сводной таблицы поле по-прежнему остается в списке полей.



Ссылки


В формулах Excel могут использоваться как внутренние, так и внешние ссылки. Компонент Spreadsheet не поддерживает внешних ссылок. Более того, поскольку каждый рабочий лист сохраняется как независимая Web-страница, то ссылки на ячейки других рабочих листов той же книги считаются внешними и не поддерживаются. В самом приложении Excel ссылки между страницами одной книги считаются внутренними.

Что касается внутренних ссылок, то для них могут использоваться различные форматы - абсолютные адреса ($A$1) и относительные - (A1). Формат относительных ссылок RC, задающий смещение по строкам и столбцам (Row - Column), считается устаревшим и не поддерживается. Использование в формулах именованных диапазонов также, к сожалению, не поддерживается. При сохранении листа Excel именованные диапазоны преобразуются в абсолютные адреса, поэтому уже написанные формулы будут, конечно, работать, но написать новую формулу в интерактивном режиме, содержащую именованный диапазон, не удастся. Поддержку именованных диапазонов можно обеспечить лишь программным путем. Не поддерживается и обновление Web-запросов.



Свойства объекта


Объект SpreadSheet.WorkSheet большинство своих свойств унаследовал от одноименного объекта в стандартной модели Excel. Поэтому мне остается их только перечислить, а за описанием можно обратиться к главе 11, где рассматриваются объекты Excel, в том числе и объект WorkSheet. Вот краткая характеристика подобных свойств объекта:

Cells, Columns, Rows, Range - свойства, возвращающие одноименные объекты. Заметьте, этими свойствами обладает и корневой объект SpreadSheet. Упомяну еще одно свойство - ViewableRange, общее для этих двух объектов, которое задает область, допустимую для просмотра. Пример использования этого свойства приводился.AutoFilter, AutoFilterMode, EnableAutoFilter, FilterMode, EnableAutoCalculate, Parent, UsedRange. Большинство свойств этой группы предназначено для работы с фильтрами. Чуть выше в одном из разделов этой главы я останавливался на особенностях фильтрации данных при работе с объектом SpreadSheet.

Рассмотрю теперь свойства, имеющие некоторую специфику:

Protection - свойство, возвращающее объект Protection, с помощью свойств которого и устанавливается защита. Свойство Enabled объекта Protection устанавливает, включена ли защита или нет. Если она включена, то остальные булевы свойства определяют, что именно защищается. Например, свойство AllowSorting позволяет задать допустимость сортировки данных в электронной таблице, а свойства AllowDeletingRows и AllowInsertingRows - удаление и вставку строк таблицы.FreezePanes - булево свойство, имеющее статус "только для чтения", возвращает значение True, когда электронная таблица содержит "замороженные" подокна.VisibleRange - свойство, возвращающее объект Range, содержащий видимую область электронной таблицы. Заметьте, видимая область может не совпадать с областью, допустимой для просмотра, возвращаемой при вызове свойства ViewableRange.



Типы диаграмм


Также как, во многом, мощь машины вычислений Excel определяется разнообразием функций, составляющих ее библиотеку, так мощь визуализации определяется разнообразием возможных типов диаграмм. Элемент Chart сохранил это многообразие, отказавшись, правда, от объемных, трехмерных изображений, - такие диаграммы будут представляться в обычном двухмерном изображении. На мой взгляд, это небольшая потеря. Зато появилась новая возможность - рисовать графики в полярной системе координат. Для визуализации инженерных расчетов такая возможность во многих случаях может быть весьма существенной.



Возможности OWC


Набор OWC разработан той же командой, что создавала приложение Excel, и представляет собой компоненты, реализующие основную функциональность Excel. В набор OWC входят четыре компонента:

Spreadsheet. Этот элемент реализует функциональность Excel, как электронной таблицы. Он включает: Машину вычислений, - при изменении значений в одной или нескольких ячейках электронной таблицы вся таблица может быть подвергнута пересчету.Полную библиотеку функций - формулы в ячейках могут ссылаться почти на все функции Excel.Возможность сортировки, фильтрации и поиска данных.Сохранение многих свойств Excel. Так, например, можно закрыть для изменения всю таблицу, разрешив для интерактивного обмена лишь ограниченное число ячеек - параметры управления. Дополнительные по сравнению с Excel свойства, позволяющие организовать взаимодействие с контейнером. В частности, имеется возможность организации обмена данными между электронной таблицей и остальной частью Web-страницы. Возможны взаимные ссылки между ячейками интерактивной электронной таблицы и элементами управления, размещаемыми на Web-странице, например текстовыми полями. В конечном счете, это позволяет передать на сервер итоговые результаты проделанных вычислений.Pivot Table. Функциональность этого компонента включает свойства сводной таблицы Excel с рядом полезных дополнений. Этот элемент позволяет: Производить свертку и развертывание сводной таблицы.Производить динамическую фильтрацию, сортировку и группирование данных.Производить автоматический подсчет сумм.Строить диаграмму, динамически отражающую изменения в таблице. Chart. Этот компонент позволяет не только просматривать график или диаграмму как статический рисунок, но, благодаря связи с источником данных, мгновенно отображать на диаграмме изменения, происходящие с данными источника. Также как и остальные Web-компоненты, объект Chart является полностью программируемым и допускает обращение к его свойствам и методам при выполнении VBScript-кода в Internet Explorer.Data Source. Этот компонент не имеет визуального образа при размещении его на Web-странице. В отличие от остальных трех элементов он не играет самостоятельной роли. Обеспечивая соединение с источником данных с последующей доставкой данных, этот элемент играет роль посредника между источником данных и другими компонентами OWC.



Ввод данных


Ввод данных в электронную таблицу может осуществляться разными способами.

Публикация рабочей книги Excel. Когда происходит публикация рабочего листа Excel или его части в виде интерактивной Web-страницы, то создается компонент SpreadSheet с уже заполненным содержанием, источником которого является рабочий лист Excel. Это один из основных способов первоначального ввода данных, применяемый при работе с офисными документами.Непосредственный ввод данных. Данные можно вводить в ячейки электронной таблицы в процессе интерактивной работы пользователя с компонентом SpreadSheet. Замечу, что эти данные сохраняются только на момент сеанса и, если не предпринять специальных мер, будут утеряны при закрытии Web-страницы.Вставка данных из буфера. Данные, находящиеся в буфере, могут быть вставлены в нужную область электронной таблицы нашего компонента. Заметьте, в буфер данные могут попадать в процессе работы с разными приложениями. Таким путем можно перенести в электронную таблицу компонента SpreadSheet, например, таблицу документа Word, не говоря уже о данных различных областей рабочих листов Excel.Вставка данных, находящихся в интрасети. Конечно, документы, используемые для этой цели, должны содержать соответствующие таблицы или списки данных со специальными разделителями. Этот способ требует программной работы с объектом SpreadSheet. Замечу, что объект SpreadSheet среди многих других свойств имеет свойство HTMLURL, которое содержит URL, указывающий источник данных для загрузки. URL должен возвращать HTML-документ, в котором есть, по крайней мере, одна таблица.Ввод данных непосредственно из контейнера. Понятно, что важно иметь возможность обмениваться данными с контейнером, - как принимать от него данные, так и передавать ему данные. В этом случае обеспечивается нормальный способ сохранения результатов работы, выполненных в очередном сеансе. Я продемонстрирую эту возможность на небольшом примере. В опубликованный документ, приведенный на рис. 10.1, я добавил поле ввода. Вот соответствующий HTML-текст:

<input Id = "myTextField" type = text size = 30>

При просмотре этого документа в Internet Explorer я ввел в это поле текст "Привет от компонентов OWC!". В одну из ячеек электронной таблицы ввел формулу:

=Document.myTextField.Value

Заметьте, здесь используется возможность работы в ячейках электронной таблицы с объектом "Document", задающим контейнер, в данном случае - Web-страницу, просматриваемую в Internet Explorer. Зная ID элементов, располагаемых на этих страницах, можно добраться до их свойств, - в данном примере до свойства Value поля ввода. Надеюсь, понятно, что значением данной формулы будет текст, введенный в поле ввода.



Вывод данных


Операции ввода-вывода данных симметричны. Почти каждому способу ввода данных соответствует свой способ вывода:

Экспорт в Excel. Созданную или модифицированную в процессе сеанса работы электронную таблицу можно экспортировать в Excel, создав в момент экспорта новую рабочую книгу. Выполняется эта операция одним щелчком кнопки экспорта данных, о которой я говорил при описании интерфейса элемента SpreadSheet. Очевидно, эта операция является обратной к операции публикации страниц рабочей книги Excel. Экспорт - это один из основных способов сохранения результатов работы с офисными документами в сети.Копирование данных в буфер. При этом данные, перенесенные в буфер, могут затем использоваться в процессе работы с разными приложениями. Таким путем можно перенести часть или всю электронную таблицу компонента SpreadSheet, например, в таблицу документа Word, или в заданную область рабочего листа Excel.Вывод данных непосредственно в контейнер. Я продемонстрирую эту возможность на небольшом примере. В нем данные из некоторой области компонента SpreadSheet переносятся в таблицу, создаваемую на Web-странице. Вот соответствующий код, обеспечивающий эту работу:<!-- Передача данных из таблицы компонента SpreadSheet на Web-страницу! --> <table datasrc = #BookFour_29850_WebCalc.A2:D6 border = 1> <thead> <tr> <th>Итоги продаж</th> <th>Иванов </th> <th>Петров </th> <th>Сидоров </th> </thead> <tbody> <tr> <td> <div datafld = "A"> </div> </td> <td> <div datafld = "B"> </div> </td> <td> <div datafld = "C"> </div> </td> <td> <div datafld = "D"> </div> </td> </tr> </tbody> </table>

Надеюсь, Вы понимаете, что я продолжаю работать с документом, приведенным на рис. 10.1. В данном случае в нем создается новая таблица, источником данных для которой является наш компонент SpreadSheet. В параметре таблицы datasrc указывается ID компонента, после точки следует адрес области данных. Префикс # указывает, что источник данных находится на той же странице, что и строящаяся таблица. Вот как выглядит построенная таблица:


увеличить изображение
Рис. 10.3.  Таблица, построенная по данным компонента SpreadSheet



XML-источник данных


В качестве источника данных для компонента Pivot Table можно указать адрес в Internet - URL, который возвращает XML-поток данных. Конечно, данные этого потока должны удовлетворять определенным требованиям. Microsoft разработала стандарт, которому должен удовлетворять XML-поток данных, и провайдера - OLE DB persistence provider, который способен принимать данные в этом формате. В главе, посвященной ADO, упоминался среди прочих и этот провайдер данных.