Руководство по написанию макросов и приложений электронных таблиц Марк Александр Бейн


Глава 7. Работа с другими документами



Pdf просмотр
страница6/9
Дата21.11.2016
Размер4.07 Mb.
Просмотров2588
Скачиваний0
ТипРуководство
1   2   3   4   5   6   7   8   9
Глава 7. Работа с другими документами
Пигосселис боролся одну минуту, а затем затих. Сфен подошла к нему, и ударила. Ничего.
Она ударила его снова. По-прежнему ничего. Она подняла его руку, на сей раз сжимая его кулак.
“Оставь его в покое, ты!”
“Ах, Корора! Я совершенно забыла о тебе.”
Она ослабила свою руку, а затем переместилась таким образом, чтобы смогла оказаться перед нею.
“Должна признаться, я была поражена этим отчетом. Очень хороший. Какая неприятность что он сгорел. Скажи мне, как Вы его сделали? Ты можешь мне это сказать, это не может причинить какого-либо ущерба в настоящее время.”
Она оглянулась назад на него. “Нет”, она подумала про себя, "это не сможет причинить какого-либо вреда, но это сможет задержать тебя подольше. Настолько долго, чтобы..."
Хорошо, мы не собираемся задерживаться. Мы используем эту главу для изучения того, как наш макрос Calc может использовать другие документы. В предыдущих главах, мы увидели, что мы можем:

Открыть существующую электронную таблицу и манипулировать его содержимым;

Открыть несколько электронных таблиц и использовать содержимое одной электронной таблицы в другой;

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

Использовать макросы для работы с документами OpenOffice.org Chart в электронных таблицах;

Использовать макросы для открытия других документов, импорта их содержимого в форму, пригодную к употреблению с последующей обработкой этого содержимого.
До сих пор мы имели дело с данными в табличном формате. В конце концов, такова электронная таблица. Однако, несмотря на то, что это пригодно для различных случаев, это не всегда лучший способ для просмотра информации — очень часто картинка является гораздо более эффективной. И именно поэтому мы собираемся начинать использовать
OpenOffice.org Charts в электронной таблице (все делается автоматически макросами, конечно).
В этой главе (и, фактически, с этого момента) мы будем иметь дело с некоторой совершенно новой функциональностью — таким образом Вы должны убедиться, что Вы работаете в самой последней версии OOo для всего используемого кода.
Диаграммы OpenOffice.org
Возможно, диаграмма — самый полезный документ, который Вы можете использовать в связке с электронной таблицей. Почему? Просто, потому что — дайте кому-нибудь десять страниц данных и они поймут содержание, со временем; дайте кому-нибудь диаграмму, представляющую эти десять страниц данных и они поймут содержание, немедленно.
Таким образом, давайте посмотрим на преобразование набора сырых данных в электронной
- 87 -

Глава 7. Работа с другими документами
таблице в профессионально выглядящую диаграмму.
Вставка простой диаграммы в электронную таблицу
Очевидно, первое необходимое действие состоит в том, чтобы ввести информацию в электронную таблицу, из другой электронной таблицы, из базы данных, или (Если действительно надо) вручную:
Далее, мы должны выбрать данные в электронной таблице; и помните, что после выбора данных мышью, Вы можете или выполнить Сервис | Макросы | Выполнить макрос... или возвратиться в редактор макросов и нажать кнопку Выполнить, чтобы выполнить Ваш макрос:
Sub
Main simple_chart
End Sub
Sub simple_chart
Dim oRange as Object
Dim oSheet as Object
Dim oCharts as Object
Dim cTitle as String
Dim oRect
As New com sun star awt
Rectangle
Dim oRangeAddress
(
1
) As New com sun star table
CellRangeAddress cTitle
=
"PPI Cases"
oRange
= thisComponent getCurrentSelection getRangeAddress oSheet
= thisComponent
CurrentSelection getSpreadsheet oCharts
= oSheet
Charts
'Установка данных оси Y
oRangeAddress
(
1
).
Sheet
= oRange
Sheet oRangeAddress
(
1
).
StartColumn
= oRange
StartColumn oRangeAddress
(
1
).
EndColumn
= oRange
StartColumn oRangeAddress
(
1
).
StartRow
= oRange
StartRow oRangeAddress
(
1
).
EndRow
= oRange
EndRow
'Установка данных оси X
oRangeAddress
(
0
).
Sheet
= oRange
Sheet oRangeAddress
(
0
).
StartColumn
= oRange
StartColumn
+
1
oRangeAddress
(
0
).
EndColumn
= oRange
EndColumn oRangeAddress
(
0
).
StartRow
= oRange
StartRow oRangeAddress
(
0
).
EndRow
= oRange
EndRow
- 88 -

Диаграммы OpenOffice.org
oCharts addNewByName
(
cTitle
, oRect
, oRangeAddress
(),
TRUE
,
TRUE
)
End Sub
Если Вы прочитали макрос, то Вы быстро поймете, что ключевая строка:
oCharts addNewByName
(
cTitle
, oRect
, oRangeAddress
(),
TRUE
,
TRUE
)
Это строка кода, которая фактически создает диаграмму, а все предыдущие строки связаны с заданием требуемых параметров для создания диаграммы. Параметры, о которых Вы должны знать:

Имя для диаграммы — оно используется только для ссылки на диаграмму, оно не отображается.

com.sun.star.awt.Rectangle
— используется для определения размера и положения диаграммы в пределах электронной таблицы.

com.sun.star.table.CellRangeAddress
— определяет диапазоны данных, которые используются для осей Y и X. Как Вы можете видеть, диапазоны определяются тем же самым способом, которым мы определяли диапазоны прежде, задавая начало и конец строк и столбцов.
Вскоре вы будете иметь диаграмму OpenOffice.org вставленную в электронную таблицу:
Хорошо. Я признаю это, она не выглядит очень впечатляюще. Однако оно показывает вам, насколько просто создать диаграмму, используя данные в таблице. Далее, мы рассмотрим, как сделать внешний вид диаграммы немного более приятным.
Форматирование диаграмм OpenOffice.org
Если Вы создавали эту диаграмму вручную, Вы вероятно:

Использовали мышь для увеличения области диаграммы, чтобы сделать ее более удобочитаемой;

Добавили соответствующий заголовок;

Поместили надписи на оси X и Y;

Изменили формат дат (на оси Y), таким образом, чтобы Вы могли на самом деле сказать, какая дата.
И так, вот что мы сделаем, но при помощи макроса.
Размер диаграммы
Диаграмма, которую мы только что создали, выглядит немного мелковато, не так ли? К
- 89 -

Глава 7. Работа с другими документами
счастью, мы можем легко изменить это, используя com.sun.star.awt.Rectangle
, используемый при создании диаграммы:
oRect
Width
=
20000
oRect
Height
=
10000
Отметьте, что ширина и высота оба определяются в 1/100 долях мм, таким образом установки выше задают ширину 20cm и высоту 10cm.
Они должны, конечно, быть помещены перед строкой:
oCharts addNewByName
(
cTitle
, oRect
, oRangeAddress
(),
TRUE
,
TRUE
)
Теперь, если Вы пробуете это, не удалив первую диаграмму, которую мы создали, то Вы получите ошибку:
Это, конечно, потому что мы создаем диаграмму по имени, а мы должны всегда уникально называть объекты. Ниже приведен простой ответ, сделаем так, чтобы макрос удалял существующую диаграмму (если она существует) прежде, чем создавать новую:
if oCharts hasByName
(
cTitle
) Then oCharts
RemoveByname
(
cTitle
)
end if
Если Вы теперь повторно запустите макрос (гарантируя, что правильные ячейки были выбраны в электронной таблице), то новая диаграмма будет отображена — в любом случае
Вы уже получили одно отображение.
Заголовок диаграммы
Задание заголовка диаграммы (отображаемого текста) является, возможно, более запутанным, чем вы могли бы ожидать, но это ни в коей мере не сложно:
Dim oChart
As Object oChart
= oCharts getByName
(
cTitle
).
embeddedObject oChart
HasMainTitle
=
True oChart
Title string
= cTitle
Также не забудьте добавить вышеприведенный код после строки:
oCharts addNewByName
(
cTitle
, oRect
, oRangeAddress
(),
TRUE
,
TRUE
)
Вспомните, что мы уже задали cTitle
:
cTitle
=
"PPI Cases"
На сей раз вместо того, чтобы увидеть 'Main title' наверху диаграммы Вы увидите 'PPI Cases'.
Добавление подписей осей диаграммы
Подписи для осей X и Y по крайней мере столь же важны как заголовок диаграммы; без них, деления на диаграмме бессмысленны. В конце концов, что 0, 1, 2, 3, и т.д., означают на самом деле? Число слонов? Количество яблок? Таким образом, чтобы устранить возможность возникновения путаницы, просто добавьте подписи, тем более что это так легко сделать:
oChart diagram
HasXAxisTitle
=
True oChart diagram
XAxisTitle string
=
"Date"
- 90 -

Диаграммы OpenOffice.org
oChart diagram
HasYAxisTitle
=
True oChart diagram
YAxisTitle string
=
"Number of Cases"
Ориентация текста оси Y
Ориентация текста для текста на оси Y может внести большое разногласие в понимание информации, а также даты выглядят лучше, если они расположены на одной строке:
oChart diagram
XAxis
TextBreak
=
False
Chart diagram
XAxis
TextRotation
=
27000
И, как вы, вероятно, догадались, поворот измеряется в 1/100 долях градуса.
Полностью отформатированная гистограмма
В конце концов, Вы имеете приятно отформатированную и профессионально выглядящую диаграмму в вашей электронной таблице:
Только для того, чтобы удостовериться, что Вы знаете порядок, в котором должно происходить создание диаграммы, вот полный код для макроса:
Sub nicer_chart
Dim oRange as Object
Dim oSheet as Object
Dim oCharts as Object
Dim oChart
As Object
Dim cTitle as String
Dim oRect
As New com sun star awt
Rectangle
Dim oRangeAddress
(
1
) As New com sun star table
CellRangeAddress cTitle
=
"PPI Cases"
oRange
= thisComponent getCurrentSelection getRangeAddress oSheet
= thisComponent
CurrentSelection getSpreadsheet oCharts
= oSheet
Charts if oCharts hasByName
(
cTitle
) Then oCharts
RemoveByname
(
cTitle
)
end if
'Установка данных оси Y
oRangeAddress
(
1
).
Sheet
= oRange
Sheet oRangeAddress
(
1
).
StartColumn
= oRange
StartColumn oRangeAddress
(
1
).
EndColumn
= oRange
StartColumn
- 91 -

Глава 7. Работа с другими документами
oRangeAddress
(
1
).
StartRow
= oRange
StartRow oRangeAddress
(
1
).
EndRow
= oRange
EndRow
'Установка данных оси X
oRangeAddress
(
0
).
Sheet
= oRange
Sheet oRangeAddress
(
0
).
StartColumn
= oRange
StartColumn
+
1
oRangeAddress
(
0
).
EndColumn
= oRange
EndColumn oRangeAddress
(
0
).
StartRow
= oRange
StartRow oRangeAddress
(
0
).
EndRow
= oRange
EndRow
'Диаграмма по умолчанию получается немного маленькой - так сделаем ее больше oRect
Width
=
20000
oRect
Height
=
10000
oCharts addNewByName
(
cTitle
, oRect
, oRangeAddress
(),
TRUE
,
TRUE
)
oChart
= oCharts getByName
(
cTitle
).
embeddedObject oChart
HasMainTitle
=
True oChart
Title string
= cTitle
'Дополнительное форматирование oChart diagram
XAxis
TextRotation
=
27000
oChart diagram
XAxis
TextBreak
=
False oChart diagram
HasXAxisTitle
=
True oChart diagram
XAxisTitle string
=
"Date"
oChart diagram
HasYAxisTitle
=
True oChart diagram
YAxisTitle string
=
"Number of Cases"
End Sub
Конечно, это не означает, что вы не сможете улучшить этот макрос, например:

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

Подписи и заголовки все жёстко запрограммированы, опять лучше если они передаются в виде строковых параметров.

Размер прямоугольника для диаграммы может также быть входным параметром, а не зафиксирован.
Другие типы диаграмм
На данном этапе, Вы вероятно подумаете о других типах диаграмм. В конце концов, в коде вообще нет ничего о них. Действительно ли гистограмма — единственный доступный тип?
Ну, конечно же нет; она — только тип по умолчанию.
Если Вы хотите использовать другой тип, то Вы только объявляете, какой из сервисов диаграмм Вы хотите использовать. Например:
oChart diagram
= oChart createInstance
(
"com.sun.star.chart.LineDiagram"
)
Этот код создает диаграмму, представляемую как линейная диаграмма:
- 92 -

Диаграммы OpenOffice.org
Вы на самом деле имеете выбор из:

Областная диаграмма

Столбчатая диаграмма — гистограмма (по умолчанию)

Линейчатая диаграмма

Линейная диаграмма

Сетчатая диаграмма

Круговая диаграмма

Составная диаграмма

Биржевая диаграмма

XY-диаграмма
Опять, Вы можете улучшить макрос (если Вы желаете), введя тип диаграммы.
Использование документов из других источников
Мы уже узнали, как использовать данные, сохраненные в:

Электронной таблице

Других электронных таблицах в системе

Базе данных
Мы также узнали, как использовать диаграммы с нашими данными. Далее мы рассмотрим данные из других источников и будем использовать их.
Анализ фондовой биржи — Yahoo! Финансы
Итак, какие данные мы будем использовать? Давайте видеть, можем ли мы сделать состояние на фондовых биржах:
- 93 -

Глава 7. Работа с другими документами
Существуют ли какие-либо акции, которыми Вы особенно интересуетесь? Как насчет посмотреть на работу Лондонской Фондовой биржи:
Наряду с ежедневными данными, сервис позволяет Вам просматривать исторические данные:
- 94 -

Использование документов из других источников
Теперь о том, каким образом сделать все это автоматически?
Импорт исторического CSV файла от Yahoo! Финансы
Перед автоматическим импортированием
.csv файла, мы сначала должны понять, как сделать это вручную. Если Вы тратите некоторое время на изучение вэб-сайта Yahoo!
Finance, то Вы обнаружите, что к историческому
.csv файлу компании можно получить доступ, используя тот же самый URL. Все, что Вы должны сделать - изменить параметр s на код компании, которой Вы интересуетесь:
Вы обнаружите, что теперь имеете выбор:

Сохранить файл на диск;

Открыть файл, используя приложение
Если Вы выбираете OpenOffice.org Calc для последнего варианта, то Вам будет представлен мастер импорта текстовых файлов:
- 95 -

Глава 7. Работа с другими документами
Далее, нужно указать мастеру разделители, которые использует файл для разделения столбцов (в нашем случае это CSV файл), OpenOffice.org Calc может тогда правильно интерпретировать содержимое файла. Как только Вы задали разделители (или просто оставили заданные по умолчанию), Вы можете нажать OK, и спустя несколько мгновений будете иметь электронную таблицу, содержащую сведения фондовой биржи для компании, которую вы выбрали.
Теперь, когда мы видели, как импортировать CSV файл вручную, представляется целесообразным создать макрос, который сделает все за нас. Помните — для того, чтобы следующий код функционировал правильно, Вы должны использовать самую последнюю версию OpenOffice.org (2.0.4 для Windows или 2.0.2 для Linux). И не беспокойтесь, когда Вы запустите его — он действительно требует времени для обработки всех данных:
Sub
Main get_stock_price_history
"MSF.L"
End Sub
Sub get_stock_price_history
(
iCompany_symbol as String)
Dim oUrl as String
Dim oDoc as Object
Dim oPropertyValue
(
0
) As New com sun star beans
PropertyValue oUrl
=
"http://ichart.finance.yahoo.com/table.csv"
_
&
"?s="
& iCompany_symbol
&
"&e=.csv"
oPropertyValue
(
0
).
Name
=
"FilterOptions"
oPropertyValue
(
0
).
Value
=
"44"
oDoc
= starDeskTop loadComponentFromURL
( oUrl
,
"_blank"
,
0
, _
oPropertyValue
)
End Sub
Я уверен, что Вы сможете весьма быстро разобраться в макросе, так как Вы видели большинство кода, используемого в других подпрограммах и функциях. Есть только две строки, над которыми Вам, вероятно, придется задуматься:
oPropertyValue
(
0
).
Name
=
"FilterOptions"
oPropertyValue
(
0
).
Value
=
"44"
Вы вероятно задаетесь вопросом, что означает 44. Весьма просто — это код ASCII для запятой.
- 96 -

Использование документов из других источников
Теперь, если Вы запустите макрос, то в конечном итоге получите что-то вроде:
С правильно импортированными данными, Вы можете или вручную выбрать область данных, или если Вы изменили макрос nicer_chart
, чтобы он принимал параметры X и Y, тогда Вы можете запустить:
Sub
Main yColumn
=
0
yStartRow
=
0
yEndRow
=
18
xStartColumn
=
1
xEndColumn
=
4
xStartRow
=
0
xEndRow
=
18
Nicer_chart
( yColumn
, yStartRow
, yEndRow
, _
xStartColumn
, xEndColumn
, xStartRow
, xEndRow
)
End Sub
Теперь Вы в состоянии импортировать исторический
.csv файл и отобразить результаты в виде диаграммы:
- 97 -

Глава 7. Работа с другими документами
Однако, имеется только одна проблема с диаграммой — она перевернута, то есть даты идут справа налево вместо того, чтобы идти слева направо. Это потому, что даты находятся в порядке убывания в электронной таблице. Таким образом все, что Вы должны сделать — добавить макрос, который будет сортировать данные для Вас:
Sub
Main get_stock_price_history
"MSF.L"
range_sort
"A1:G201"
End Sub
Sub range_sort
(
iSortArea as String)
Dim oSortField
(
0
) As New com sun star table
TableSortField
Dim oPropertyValue
(
1
) As New com sun star beans
PropertyValue
Dim oRange as Object oRange
=
ThisComponent
Sheets
(
0
).
getCellRangeByName
(
iSortArea
)
oSortField
(
0
).
Field
=
0
oSortField
(
0
).
IsAscending
=
True oSortField
(
0
).
IsCaseSensitive
=
False oPropertyValue
(
0
).
Name
=
"SortFields"
oPropertyValue
(
0
).
Value
= oSortField oPropertyValue
(
1
).
Name
=
"ContainsHeader"
oPropertyValue
(
1
).
Value
=
True oRange sort
(
oPropertyValue
)
End Sub
Когда Вы объедините все это, Вы получите хорошую картину того, насколько успешно
Microsoft вела дела на Лондонской Фондовой бирже в течение прошлых нескольких месяцев:
- 98 -

Использование документов из других источников
Сравнение компаний в Yahoo! Финансы
Мы увидели, как импортировать
.csv файл из Yahoo! Финансы, чтобы рассмотреть историю деятельности компании, но как насчет того, чтобы посмотреть, что делают все наши акции в настоящее время?
Подобно историческому
.csv
, Вы просто должны правильно использовать URL для доступа к данным:
Как прежде, мы должны ввести в код (или символ) для каждой интересующей компании, например:

MSFT: Microsoft на рынке Nasdaq;

RHAT: Red Hat на рынке Nasdaq;

NOVL: Novell на Nasdaq.
Если Вы не уверены относительно кода, то есть средство поиска на вэб-сайте.
Вы можете также задаваться вопросом о части URL — f=sl1d1
. Вот некоторые из полей, которые будут включены в
.csv файл:

s
: символ компании

l1
: Последняя торговая цена

d1
: Последняя торговая дата
Есть несколько различных полей, которые Вы можете использовать; обратитесь к вэб-сайту Yahoo! Финансы, чтобы узнать обо всех других.
Таким образом, единственное, что нужно делать сейчас — добавить макрос для импорта информации:
Sub
Main get_stock_price
(
array
(
"MSFT"
,
"RHAT"
,
"NOVL"
))
End Sub
- 99 -

Глава 7. Работа с другими документами
Sub get_stock_price
(
iCompany_symbols
)
Dim oUrl as String
Dim oDoc as Object
Dim oSymbols as String
Dim oFields as String
Dim oPropertyValue
(
0
) As New com sun star beans
PropertyValue oSymbols
= join
(
iCompany_symbols
,
"&s="
)
oFields
=
"sl1d1"
oUrl
=
"http://finance.yahoo.com/d/quotes.csv"
_
&
"?s="
& oSymbols
&
"&f="
& oFields
&
"&e=.csv"
oPropertyValue
(
0
).
Name
=
"FilterOptions"
oPropertyValue
(
0
).
Value
=
"44"
'используем запятую в качестве разделителя полей oDoc
= starDeskTop loadComponentFromURL
(
oUrl
,
"_blank"
,
0
, oPropertyValue
)
End Sub
Новые, текущие данные будут загружены в электронную таблицу:
Я знаю, что Вы уже можете увидеть проблему с данными. Вы не можете? Это весьма просто.
У столбцов нет никаких заголовков, что означает, что Вы будете не в состоянии отобразить информацию в диаграмме. К счастью, решение этой задачи занимает несколько строк кода:
oDoc
Sheets
(
0
).
getRows insertByIndex
(
0
,
1
)
oDoc
Sheets
(
0
).
getCellByPosition
(
1
,
0
).
String
=
"Share Value"
Теперь Вы можете использовать макрос, чтобы отобразить данные в диаграмме:
Конечно, Вы можете предпочесть объединять подпрограмму импорта
.csv с подпрограммой для исторического
.csv файла. Если Вы это делаете, то должны помнить что:

Исторический
.csv может содержать информацию только об одной компанией за раз, тогда как текущий
.csv может содержать так много компаний, сколько Вам необходимо.

Исторический
.csv загружается с http://ichart.finance.yahoo.com
, тогда как
- 100 -

Использование документов из других источников
текущий
.csv
— с http://finance.yahoo.com

Исторический
.csv импортируется с заголовками столбцов, тогда как текущий
.csv
— импортируется без них.
Обработка вэб-страниц
Начнем с вопроса — как Вы макросом открываете пустой документ Calc? Будем надеяться,
Вы ответите, что используете функцию, которую мы написали в Главе 6:
Function open_spreadsheet
Dim oURL
as String oURL
=
"private:factory/scalc"
open_spreadsheet
= starDeskTop loadComponentFromURL
(
oURL
,
"_blank"
,
0
,
Array
())
End Function
Таким образом, другой вопрос — Как Вы открываете макроссом пустой документ Writer? Не уверенны? Позвольте мне дать Вам ключ — Вы можете использовать ту же самую подпрограмму, но Вы должны изменить одно слово. Не верите? Просто измените:
oURL
=
"private:factory/scalc"
на:
oURL
=
"private:factory/swriter"
Из этого я уверен, можно сделать вывод, что это URL , который определяет, каким образом открывается файл; это верно как для нового, пустого файла, а также для существующих документов.
Таким образом, что же происходит, когда Вы пробуете обработать веб-страницу, например:
которая (когда Вы смотрите на нее через браузер) дает Вам:
Если Вы пробуете открыть веб-страницу через макрос, например:
oUrl
=
"http://finance.yahoo.com/lookup?s=novell&t=S&m=ALL"
oDoc
= oDesk loadComponentFromURL
( oUrl
,
"_blank"
,
0
,
Array
())
Она будет открыта в приложении OpenOffice.org Web Writer:
- 101 -

Глава 7. Работа с другими документами
К сожалению, в действительности это не дает нам много пользы, особенно если мы хотим извлечь какую-нибудь информацию из вэб-страницы (например, список символов). Конечно, мы можем пойти и изучить все об web writer, но так как мы уже работаем с Calc, кажется целесообразным импортировать страницу в Calc, и затем обработать ее. Таким образом, вот что мы сделаем.
Мы уже видели, что мы можем импортировать
.csv файл, используя параметры
FilterOption
:
oPropertyValue
(
0
).
Name
=
"FilterOptions"
oPropertyValue
(
0
).
Value
=
"44"
'Use a comma as the field separator oDoc
= oDesk loadComponentFromURL
( oUrl
,
"_blank"
,
0
, _
oPropertyValue
)
Однако, простое выполнение этого не поможет с вэб-страницей, из-за суффикса
.html
,
OpenOffice.org автоматически интерпретирует документы HTML как вэб-страницу и не как электронную таблицу. Поэтому, Мы должны сказать макросу как конкретно открыть документ:
oPropertyValue
(
1
).
Name
=
"FilterName"
oPropertyValue
(
1
).
Value
=
"Text - txt - csv (StarCalc)"
Теперь мы можем написать макрос, который может взять любую вэб-страницу и обработать данные, содержащиеся в ней
1
:
Sub
Main get_symbols
"novell"
End Sub
Sub get_symbols
(
icompany as String)
Dim oUrl as String
Dim oDoc as Object
Dim oSheet as Object
Dim oCell as Object
Dim i
as Integer
Dim r
as Integer
Dim rows
()
Dim fields
()
Dim field
()
Dim result as String
Dim oPropertyValue
(
1
) As New com sun star beans
PropertyValue oUrl
=
"http://finance.yahoo.com/lookup?s="
& icompany
& _
"&t=S&m=ALL"
oPropertyValue
(
0
).
Name
=
"FilterOptions"
1 Текст данной процедуры немного отличается от того, который представлен в оригинале книги. Это связано с тем, что за прошедшее с написания книги время дизайн сайта изменился. (Прим. переводчика)
- 102 -

Обработка вэб-страниц
oPropertyValue
(
0
).
Value
=
"94"
'используем каретку в качестве разделителя полей oPropertyValue
(
1
).
Name
=
"FilterName"
oPropertyValue
(
1
).
Value
=
"Text - txt - csv (StarCalc)"
oDoc
= starDeskTop loadComponentFromURL
(
oUrl
,
"_blank"
,
0
, oPropertyValue
)
'Получим ячейку, которую мы должны обработать oCell
= oDoc
Sheets
(
0
).
getCellByPosition
(
0
,
91
)
'Получим количество символов rows
= split
(
ocell
String
,
"Stocks ("
)
fields
= split
(
rows
(
1
),
")"
)
Dim symbol
(
fields
(
0
) -
1
)
'Получим символы для компании field
= split
(
ocell
String
,
"
"
)
rows
= split
(
field
(
1
),
""
)
For i
=
0
To cInt
(
fields
(
0
)) -
1
fields
= split
(
rows
(
i
),
"s="
)
field
=
Split
( fields
(
2
),
""""
)
symbol
(
i
) = field
(
0
)
Next i
oDoc
Close
(
True
)
'Удалите эту строку, чтобы просмотреть предварительные данные msgbox join
(
symbol
, chr
(
10
))
End Sub
Конечный результат — окно сообщения, содержащее перечень символов для компании:
Вы заметите что макрос:

Специально загружает вэб-страницу как документ Calc;

Обрабатывает ячейки внутри новой электронной таблицы, разбивая данные в массив;

Каждый массив создается согласно структуре HTML в отдельных ячейках.
Это - один из тех случаев, где Вы не можете написать общий макрос. Вы должны понять структуру вэб-страницы, которую Вы хотите импортировать, а затем построить макрос в соответствии с этой структурой.
Резюме
В этой главе мы увидели, что документы, такие как OOo Chart могут использоваться в Calc используя сервис диаграммы, который содержится в каждой электронной таблице.
Диаграммы — пои умолчанию гистограммы, но Вы можете изменить это, настраивая объект диаграммы.
Файлы CSV могут быть импортированы с использованием параметра
FilterOptions при
- 103 -

Глава 7. Работа с другими документами
открытии документа. Другие типы документов могут быть загружены, но Вы должны определить это, задавая свойство
FilterName
“Хорошо, это интересно”, сказала Сфен, “Спасибо за информацию, но я обязана любить Вас и оставлю Вас. Не волнуйтесь, хотя, я вернусь, чтобы закончить беседу.”
Он вернулась к Пигосселису, и ударила его снова. “Все еще без сознания”, Сфен наблюдала
“А я думала, он был столь вынослив”.
С этим она повернулась и оставила комнату. Немедленно Корора почувствовала движение позади себя.
- 104 -



Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал