Опубликован: 13.09.2006 | Уровень: для всех | Доступ: свободно
Лекция 10:

Возможности и применение Office Web-компонентов

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

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

Ввод данных

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

  • Публикация рабочей книги 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 компонента, после точки следует адрес области данных. Префикс # указывает, что источник данных находится на той же странице, что и строящаяся таблица. Вот как выглядит построенная таблица:

Таблица, построенная по данным компонента SpreadSheet

увеличить изображение
Рис. 10.3. Таблица, построенная по данным компонента SpreadSheet
Объектная модель компонента 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

По понятным причинам объект 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.

Ольга Гафарова
Ольга Гафарова
Непонятен ход решения задачи
Серегй Лушников
Серегй Лушников
Может ли объект Recordset быть потомком объекта Record?
Геннадий Шестаков
Геннадий Шестаков
Беларусь, Орша
Светлана Ведяева
Светлана Ведяева
Россия, Саратов