Краткая теория
Макросы в Calc
1. Запустите OpenOffice.org Calc.
Создайте текстовый документ
C:\2kurs\vasya\upr11-1.ods
2. Создайте в документе upr11-1.ods
библиотеку myLibrary1
см. Лабораторную работу 8.
3. Откройте макрос для редактирования в
upr11-1.ods\myLibrary1\Module1
4. Запишите программу на OOo Basic
и сохраните ее.
5. В главном меню выберите
Вид\Панели инструментов\Элементы управления
6. Разместите в документе кнопку
и свяжите с ней макрос.
Макросы в Base
1. Запустите OpenOffice.org Base.
Создайте текстовый документ
C:\2kurs\vasya\upr11-2.odb
2. Создайте в документе upr11-2.odb
библиотеку myLibrary1
см. Лабораторную работу 8.
3. Откройте макрос для редактирования в
upr11-2.odb\myLibrary1\Module1
4. Запишите программу на OOo Basic
и сохраните ее.
5. На вкладке Таблицы создайте таблицу
и сохраните ее, например, под именем scores1,
т.е. рейтинг.
5. На вкладке Формы создайте форму
в режиме дизайнера, или конструктора.
6. Разместите на форме кнопку
и свяжите с ней макрос.
Об отметках
Основные упражнения не отмечены никакими специальными знаками, их выполнения достаточно для удовлетворительной оценки. Дополнительные упражнения отмечены "звездочками", их выполнение необходимо для получения повышенной оценки.
"5" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной и двумя "звездочками".
"4" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной "звездочкой".
"3" - в отчете выполнены все основные упражнения.
Упражнения
1. Создайте в приложении OpenOffice.org Calc
программу на языке OOo Basic, которая имитирует
полет тела, брошенного под углом к горизонту.
Создайте таблицу из двух колонок x и y - координат
тела. Задайте в таблице значения x=0 и y=0.
Вставьте диаграмму типа "Пузырёк".
Добавьте на рабочий лист две кнопки:
Start и Сброс.
Пример
' Глобальные константы
Const COL_X = 1
Const COL_Y = 2
Const ROW_X = 2
Const ROW_Y = 2
Sub Main
Const START_X = 0
Const END_X = 2
Const STEP_X = 0.01
Dim Doc As Object
Dim Sheet As Object
Dim Cell_X As Object
Dim Cell_Y As Object
Dim x As Double
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell_X = Sheet.getCellByPosition(COL_X, ROW_X)
Cell_Y = Sheet.getCellByPosition(COL_Y, ROW_Y)
For x = START_X To END_X Step STEP_X
Cell_X.Value = x
y = 1-(x-1)^2
Cell_Y.Value = y
Next x
End Sub
Sub setStart
Dim Doc As Object
Dim Sheet As Object
Dim Cell_X As Object
Dim Cell_Y As Object
Dim x As Double
Dim y As Double
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell_X = Sheet.getCellByPosition(COL_X, ROW_X)
Cell_Y = Sheet.getCellByPosition(COL_Y, ROW_Y)
x = 0
y = 0
Cell_X.Value = x
Cell_Y.Value = y
End Sub
2. В 3-х колонках электронной таблицы находятся
фамилии, имена, отчества. Создать программу, которая
записывает в одной из колонок строки так, чтобы
в каждой ячейке была фамилия и следом
за ней соответствующие инициалы.
Пример
Sub Main
Const COL_NAME1 = 1
Const COL_NAME2 = 2
Const COL_NAME3 = 3
Const START_ROW = 1
Const END_ROW = 5
Const START_ROW2 = 10
Const END_ROW2 = 15
Dim Doc As Object
Dim Sheet As Object
Dim Cell_1 As Object
Dim Cell_2 As Object
Dim row As Integer
Dim row2 As Integer
Dim s As String
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
row2 = START_ROW2
s = ""
For row = START_ROW To END_ROW
Cell_1 = Sheet.getCellByPosition(COL_NAME1, row)
s = s & Cell_1.String
Cell_1 = Sheet.getCellByPosition(COL_NAME2, row)
s = s & " " & Left(Cell_1.String, 1) & "."
Cell_1 = Sheet.getCellByPosition(COL_NAME3, row)
s = s & Left(Cell_1.String, 1) & "."
Cell_2 = Sheet.getCellByPosition(COL_NAME1, row2)
Cell_2.String = s
row2 = row2 + 1
s = ""
Next row
End Sub
3. Создайте в базе данных таблицу с оценками учащихся
по физике, математике, информатике. Создайте форму,
разместите на ней кнопку, с которой свяжите макрос.
Макрос должен по заданной дисциплине вычислять количество
оценок и среднее арифметическое.
Пример
Sub Main
Dim DatabaseContext As Object
Dim DataSource As Object
Dim Connection As Object
Dim InteractionHandler as Object
Dim Statement As Object
Dim ResultSet As Object
Dim sum As Integer
Dim num As Integer
Dim hobby As String 'занятие
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("upr11-2")
If Not DataSource.IsPasswordRequired Then
Connection = DataSource.GetConnection("", "")
Else
InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If
Statement = Connection.createStatement()
hobby = InputBox("Выберите дисциплину (fiz, mat, inf):", "Дисциплина", "fiz")
ResultSet = Statement.executeQuery("SELECT " & hobby & " FROM scores1")
If Not IsNull(ResultSet) Then
sum = 0
num = 0
While ResultSet.next
sum = sum + Val(ResultSet.getString(1))
num = num + 1
Wend
MsgBox "Количество оценок: " & num & CHR$(10) & CHR$(13)_
& "Средний балл: " & sum/num
End If
End Sub
4.* В 3-х колонках электронной таблицы находятся
фамилии, имена, отчества. Написать программу,
котрая переносит список на другой лист рабочей книги,
преобразуя строки так, чтобы в каждой ячейке сначала
шли инициалы, а затем - фамилия.
5.* Напишите программу, с помощью которой в базе данных
из задачи 2 выводятся имена всех учеников,
у которых по данной дисциплине заданная отметка.
6.* В 3-х колонках электронной таблицы находятся
фамилии, имена, отчества. В некоторую ячеку
вводят букву. Написать программу,
котрая переносит по щелчку по одной кнопке
из списка на 2-й лист фамилии, начинающиеся
с этой буквы. При щелчке по второй кнопке
программа переносит на 3-й лист имена, которые
начинаются с заданной буквы.
7.** В программе имитации полета тела добавьте
возможность ввода начальной скорости, угла,
под которым бросают тело и высоты, с которой бросают
тело.